当前位置: 代码迷 >> J2SE >> 关于TreeSet判断是否相等的有关问题
  详细解决方案

关于TreeSet判断是否相等的有关问题

热度:9   发布时间:2016-04-23 20:37:37.0
关于TreeSet判断是否相等的问题。
判断TreeSet中元素是否相等是否只需要判断两者通过CompareTo方法比较是否返回0即可?
那么为什么有些帖子说两个对象通过equals方法返回0就可以判断两个对象不等?
现在举个例子。
重写equals方法,使其总是返回false。
而实现CompareTo方法使其总是返回0。
那么这个类的对象添加到TreeSet会发生什么?
------解决方案--------------------
引用:
Quote: 引用:

compare只是比较set里面的对象,如果为0则只会出现一个
判断集合对象是否相等还是要用equals方法

那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等?
我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。


是的添加的时候不管equals 
可以看api
TreeSet
public TreeSet(Comparator<? super E> c)构造一个新的空 set,该 set 根据指定的比较器进行排序。所有插入到该 set 的元素都必须可由指定的比较器相互比较:为 set 中的任何元素 e1 和 e2 执行 comparator.compare(e1, e2) 时必须不抛出 ClassCastException。如果用户尝试将违背此约束的元素添加到 set 中,则 add(Object) 调用将抛出 ClassCastException。 

参数:
c - 用于对此 set 进行排序的比较器。null 值表示应该使用元素的自然顺序。

------解决方案--------------------
返回-1表示什么,表示set中已存在该对象了是吗?那么再加入这个类的同一个对象只是覆盖了之前的对象吧?set不是有序不重复的么,你可以看下set的长度有没有增加
------解决方案--------------------
TreeSet只能添加实现了Comparable接口的对象。
重写compareTo方法,总返回0,那么同一个对象只能添加1个。
  相关解决方案