需要为 Java 中 TreeSet/TreeMap 中的自定义对象覆盖 hashCode() 和 equals()

问题描述

有人可以帮助理解为什么我们在 Java 中处理 TreeSet 或 TreeMap 中的自定义对象时需要覆盖 hashCode() 和 equals() 吗?根据下面链接的 Javadocs,我看到 TreeSet 使用 compareto() 对数据进行排序。那么,为什么仅覆盖 compareto() 不足以在 TreeSet 或 TreeMap 中实现我的自定义排序功能

如果它是可选的,我们应该肯定这样做的用例是什么?

Javadoc 参考:https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

Set 接口是根据 equals 操作定义的,但是 TreeSet 实例使用它的 compareto(或 compare)方法执行所有元素比较,因此从 set 的角度来看,被此方法视为相等的两个元素是,相等。

一个 Stackoverflow 帖子中的一个被接受的答案作为参考,它也这样做:How can I use a custom class in a TreeSet?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)