java之对于 containsKey(),treemap 使用 compareTo 而不是 equals
我尝试使用 containsKey
的 TreeMap
方法,但不知何故我遇到了问题。
存储在树形图中的对象被定义,例如 equals()
不会提供与 compareTo()
相同的结果。这是有意的。
但是,java.util.Map
的文档说:
Returns true if this map contains a mapping for the specified key. More formally, returns true if and only if this map contains a mapping for a key k such that
(key==null ? k==null : key.equals(k))
. (There can be at most one such mapping.)
所以我尝试了以下操作:
c = someModifiedObject();
boolean t1 = sm.containsKey(c);
someObject c2 = new someObject();
boolean t2 = sm.containsKey(c2);
boolean t3 = c.equals(new Chain());
int t4 = c.compareTo(new Chain());
t1 为真,因为对象在树形图中。
t3 为真,因为 t1 等于 t3(关于更改
equals()
运算符)
t4 为假
但是,t2 也是错误的。似乎
TreeMap
使用
compareTo()
而不是
equals()
来确定对象是否存在。
是否有排序 map 的另一种实现,我可以在其中使用
equals()
来检查对象是否存在?
请您参考如下方法:
虽然没有标准的 java API 可以准确地得到你想要的,你可以创建你自己的 Comparator 接口(interface),然后让你的 TreeMap
实现这个Comparator
.您可以覆盖 compareTo()
方法以随心所欲(在您的情况下,使其行为与 equals()
方法相同)。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。