- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 CircuitId 类
作为键控的 HashMap
。 CircuitId 类包含一个 String clci 成员,并且该类基本上通过使用 clci 成员的 hashCode()/equals()
来重写 hashCode()/equals()
。
我想这样做,以便我可以使用简单的字符串查找 map ,并且无需将字符串转换为 CircuitId
对象来查找 map 。但它不起作用,我认为因为 HashMap
使用这种评估形式 (key==null ? k==null : key.equals(k))
其中 key 是输入键和 k 是映射中的键条目,特别是 key.equals(k) 部分。我想知道为什么 HashMap 没有执行 k.equals(key)
呢?
(至少这样,我认为我正在尝试做的事情会起作用。)但事实并非如此,有什么技巧可以做到这一点吗?
最佳答案
If i have overridden the equals() with the check to handle if the key being passed is a string or an actual CircuitId object, i don't understand why it wouldn't have worked.
容器是否将电路与字符串进行比较,或者字符串与电路进行比较是特定于实现的,并且不保证在 JRE 的 future 版本中相同。
一般来说,给定两个对象a
和b
,预计a.equals(b)
当b.equals(a)
反之亦然。这称为对称属性。
以CircuitId
为例和String
,而您可以覆盖 CircuitId.equals()
并制作circuit.equals(id)
返回true
, id.equals(circuit)
永远是false
因为你无法覆盖 String.equals()
。
您应该使用 Map<String,CircuitId>
(也许还有另一个 Map<CircuitId,SomethingElse>
,以防您需要将 CircuitId
作为另一个 map 中的键。
关于java - 使用字符串查找 Java 非字符串键控 Java HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165372/
我是一名优秀的程序员,十分优秀!