use*_*142 5 java equals treemap compareto
我尝试使用的containsKey方法TreeMap,但是以某种方式我遇到了问题。
存储在树形图中的对象的定义与equals()不会产生相同的结果compareTo()。这是有意的。
但是,的文档java.util.Map说:
如果此映射包含指定键的映射,则返回true。更正式地说,当且仅当此映射包含键k的映射(例如)时,才返回true
(key==null ? k==null : key.equals(k))。(最多可以有一个这样的映射。)
因此,我尝试了以下操作:
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());
Run Code Online (Sandbox Code Playgroud)
t1为true,因为对象位于树形图中。t3为true,因为t1等于t3(对于更改equals()运算符而言)t4为false,但是,t2也为false。似乎TreeMap使用compareTo()而不是equals()确定对象是否存在。
是否有排序映射的另一种实现,可以equals()用来检查对象是否存在?
虽然没有标准的 java API 可以准确地获得您想要的内容,但您可以创建自己的 Comparator 接口,然后实现TreeMap它Comparator。您可以重写该compareTo()方法以按照您想要的方式运行(在您的情况下,使其行为方式与equals()方法相同)。