JAVA TreeSet添加对象有问题

JAVA TreeSet添加对象有问题,第1张

说真的,你这么多的代码让别人帮你看,却没分

别人怎么又动力,不过咱们这种命苦的就算了,权当作是锻炼

你程序里面有个地方写的很精妙,我喜欢!!!!

return p1.whole<p2.whole?1:p1.whole<p2.whole?-1:0

可惜这正是你的程序出差错的地方

稍微修改一下

return p1.whole<p2.whole?1:p2.whole<p1.whole?-1:0

另外我从api上c了点资料:

如果要正确实现 Set 接口,则 set 所维护的顺序(是否提供了显式比较器)必须为与等号一致(请参阅与等号一致 精确定义的 Comparable 或 Comparator)。这是因为 Set 接口根据 equals *** 作进行定义,但 TreeSet 实例将使用其 compareTo(或 compare)方法执行所有的键比较,因此,从 set 的角度出发,该方法认为相等的两个键就是相等的。即使 set 的顺序与等号不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。

你那个类型比较器是错误,混乱的,而TreeSet必须有严格的比较器才能正确

的使用,多加一句,你可以使用泛型<>,省去很多的强制转换.

报此异常

是因为要添加的对象需要实现 comparable接口

并且重写comparato方法

但是往Hashset方法里添加对象元素就不需要实现comparable接口,就可以直接添加对象.因为

放进去的东西要支持 Comparable 接口,或者你在 new TreeSet(comparator())带一个自己指定的 comparator 来处理“谁大谁小”的问题。

改写 equals 和 hashCode 总是必须的,你需要保证逻辑意义上它们之间的表现是一致的,比如当两个东西概念上是一样的,那么它们的 equals 和 hashCode 就应该是一样的,概念上它们不一样的话,那它至少 equals 应该返回 false 而 hashCode 在这时相同或不相同都没关系。至于 hashCode 返回什么值不重要,重要的是你需要保证上面说的,相同和不相同的一致性。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/8011071.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存