[英]How to get two different objects into a TreeSet?
如果有的話,我無法將兩個不同的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]
你不能通過TreeSet
類的契約。
請注意,如果要正確實現Set接口,則由set維護的排序(無論是否提供顯式比較器)必須與equals一致。 (有關與equals一致的精確定義,請參閱Comparable或Comparator。)
如果你有不同的對象(即!a.equals(b)
), a.compare(b)
或comparator.compare(a, b)
為零,你就違反了這個合同。
你可以(間接)執行它的唯一方法是在構造TreeSet
時傳入一個Comparator
(例如new TreeSet<>(someComparator)
,它們在對象之間打破,即導致compare(a, b)
的結果為非零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.