【发布时间】:2014-02-05 01:29:22
【问题描述】:
我想知道是否有办法绕过对象 w.r.t 的唯一性。 compareTo() / Comparator.compare() 方法。例如,假设我有课
class MyClass extends Comparable<MyClass> {
int value;
// ... plenty of other fields
public int compareTo(MyClass other) { ... // compares using the value field }
}
并希望将 MyClass 的不同实例放入 TreeSet。不同的是,我的意思是如果默认的equals() 会为两个插入的对象返回false,那么两者都应该保留在 TreeSet 中。
当然,以“高”正确率实现这一点的方法是让 compareTo() 方法首先检查 value 字段,如果出现平局,则通过比较hashCode() 值。
我怀疑是否存在实现所需行为的方法,因为 Java 不提供将引用转换为可比较类型的安全方法(与 C/C++ 不同)。但是,如果有人有任何想法,请告诉我。
否则,有没有比从头重写 TreeSet 更简单的替代方法,或者比使用 TreeMap<K, HashSet<K>> 更简单的替代方法?
【问题讨论】:
-
完整显示 compareTo 和 equals 可能会有所帮助
标签: java collections tree comparison duplicates