如何将两个不同的对象放入TreeSet?

时间:2017-06-02 08:33:24

标签: java 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]

以上程序的输出是:

media="print"

1 个答案:

答案 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)为非零。