簡體   English   中英

如何將兩個不同的對象放入TreeSet?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM