treemap使用compareTo而不是equals for containsKey()

时间:2014-02-17 17:25:12

标签: java equals treemap compareto

我尝试使用containsKey的{​​{1}}方法,但不知何故我遇到了问题。

定义存储在树形图中的对象,例如TreeMap不会提供与equals()相同的结果。这是打算。

然而,compareTo()的文件说:

  

如果此映射包含指定键的映射,则返回true。更正式地说,当且仅当此映射包含键{k}的映射时才返回true java.util.Map。 (最多可以有一个这样的映射。)

所以我尝试了以下:

(key==null ? k==null : key.equals(k))

t1为true,因为对象位于树形图中。 t3为真,因为t1等于t3(关于更改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()); 运算符) t4是假的 但是,t2也是假的。似乎equals()使用TreeMap而不是compareTo()来确定对象是否存在。

是否有另一个有序地图的实现,我可以使用equals()来检查对象是否存在?

1 个答案:

答案 0 :(得分:0)

虽然没有标准的java API可以完全获得您想要的内容,但您可以创建自己的Comparator界面,然后让TreeMap实现此Comparator。您可以覆盖compareTo()方法以按照您的意愿行事(在您的情况下,使其行为与equals()方法相同)。