java之对于 containsKey(),treemap 使用 compareTo 而不是 equals

itcoder 阅读:20 2024-12-31 21:38:35 评论:0

我尝试使用 containsKeyTreeMap 方法,但不知何故我遇到了问题。

存储在树形图中的对象被定义,例如 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() 方法相同)。


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号