
别人怎么又动力,不过咱们这种命苦的就算了,权当作是锻炼
你程序里面有个地方写的很精妙,我喜欢!!!!
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 返回什么值不重要,重要的是你需要保证上面说的,相同和不相同的一致性。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)