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

逍遥jc 2014-06-18 10:38:18
判断TreeSet中元素是否相等是否只需要判断两者通过CompareTo方法比较是否返回0即可?
那么为什么有些帖子说两个对象通过equals方法返回0就可以判断两个对象不等?
现在举个例子。
重写equals方法,使其总是返回false。
而实现CompareTo方法使其总是返回0。
那么这个类的对象添加到TreeSet会发生什么?
...全文
430 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
逍遥jc 2014-06-18
  • 打赏
  • 举报
回复
引用 7 楼 qingzhukl 的回复:
返回-1表示什么,表示set中已存在该对象了是吗?那么再加入这个类的同一个对象只是覆盖了之前的对象吧?set不是有序不重复的么,你可以看下set的长度有没有增加
返回-1表示前者小于后者,也就是说set中可以添加该元素,并不会被覆盖。我之前的理解就是TreeSet只需要用CompareTo方法比较就可以了。因为看到网上有些使用equals方法比较的所以比较疑问。主要是因为Set是根据equals来比较大小的,而TreeSet和Set可能有点出入。
qingzhukl 2014-06-18
  • 打赏
  • 举报
回复
返回-1表示什么,表示set中已存在该对象了是吗?那么再加入这个类的同一个对象只是覆盖了之前的对象吧?set不是有序不重复的么,你可以看下set的长度有没有增加
逍遥jc 2014-06-18
  • 打赏
  • 举报
回复
引用 5 楼 cbxjj 的回复:
[quote=引用 4 楼 u010111184 的回复:] [quote=引用 3 楼 cbxjj 的回复:] compare只是比较set里面的对象,如果为0则只会出现一个 判断集合对象是否相等还是要用equals方法
那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等? 我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。[/quote] 是的添加的时候不管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 值表示应该使用元素的自然顺序。
[/quote] 嗯。谢谢。
剑神一笑 2014-06-18
  • 打赏
  • 举报
回复
引用 4 楼 u010111184 的回复:
[quote=引用 3 楼 cbxjj 的回复:] compare只是比较set里面的对象,如果为0则只会出现一个 判断集合对象是否相等还是要用equals方法
那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等? 我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。[/quote] 是的添加的时候不管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 值表示应该使用元素的自然顺序。
逍遥jc 2014-06-18
  • 打赏
  • 举报
回复
引用 3 楼 cbxjj 的回复:
compare只是比较set里面的对象,如果为0则只会出现一个 判断集合对象是否相等还是要用equals方法
那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等? 我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。
剑神一笑 2014-06-18
  • 打赏
  • 举报
回复
compare只是比较set里面的对象,如果为0则只会出现一个 判断集合对象是否相等还是要用equals方法
逍遥jc 2014-06-18
  • 打赏
  • 举报
回复
引用 1 楼 longtian1213 的回复:
CompareTo是用来排序的,TreeSet是有序set!
这个我知道啊。我只是想明白在TreeSet中加元素的问题。CompareTo不返回0是否一定就能添加进去?
S117 2014-06-18
  • 打赏
  • 举报
回复
CompareTo是用来排序的,TreeSet是有序set!
逍遥jc 2014-06-18
  • 打赏
  • 举报
回复
引用 9 楼 abc_key 的回复:
TreeSet只能添加实现了Comparable接口的对象。 重写compareTo方法,总返回0,那么同一个对象只能添加1个。
嗯。TreeSet只需要考虑compareTo方法就可以了。
xlight2023 2014-06-18
  • 打赏
  • 举报
回复
TreeSet只能添加实现了Comparable接口的对象。 重写compareTo方法,总返回0,那么同一个对象只能添加1个。

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧