如果不是objects
,我无法将TreeSet
变为compareTo(the other)==0.
public class Test
{
private static SortedSet sortedSet = new TreeSet();
public static void main(String[] args) {
sortedSet.add(new IntegerBucket("Winner", 3));
sortedSet.add(new IntegerBucket("Looser", 3));
System.out.println("sortedSet has " + sortedSet.size() + " members");
System.out.println(sortedSet);
}
}
class IntegerBucket implements Comparable {
private int value = 0;
private String name = null;
public IntegerBucket(String n, int val) {
name = n;
value = val;
}
public int getValue() {
return value;
}
// Comparable interface
public int compareTo(Object ob) {
return getValue() - ((IntegerBucket) ob).getValue();
}
public String toString() {
return name + " " + getValue();
}
}
有人可以帮助理解这一点,我如何在树集中实现它。
sortedSet has 1 members
[Winner 3]
以上程序的输出是:
media="print"
答案 0 :(得分:3)
你不能通过TreeSet
类的合同。
请注意,如果要正确实现Set接口,则由set维护的排序(无论是否提供显式比较器)必须与equals一致。 (有关与equals一致的精确定义,请参阅Comparable或Comparator。)
如果您有!a.equals(b)
或a.compare(b)
为零的不同对象(即comparator.compare(a, b)
),则表示您违反了此合同。
你可以(间接)做到的唯一方法是在构造Comparator
时传递TreeSet
(例如new TreeSet<>(someComparator)
在对象之间打破间隔,即导致结果compare(a, b)
为非零。