根据属性保持SortedSet对象

时间:2012-03-21 00:38:48

标签: java sorting set sortedset

我有一个对象Test,它有两个属性,double xdouble y。我想将这些对象添加到SortedSet,保持集合按照AS Test的x顺序排序。如果Test的两个实例具有相同的x值,我希望它们按照y值在集合内进行排序。

我认为以下方法可以解决问题:

private SortedSet<Test> tests = new TreeSet<Test>(new Comparator<Test>() {

@Override
public int compare(Test o1, Test o2) {
    if (o1.getXpos() < o2.getXpos()) {
        return -1;
    }
    if (o1.getXpos() > o2.getXpos()) {
        return 1;
    }
    if (o1.getXpos() == o2.getXpos()) {
        if (o1.getYpos() < o2.getYpos()) {
            return -1;
        }
        if (o1.getYpos() > o2.getYpos()) {
            return 1;
        }
        if (o1.getYpos() == o2.getYpos()) {
            return 0;
        }
    }
    return 0;
}
});

而是命令实际的x和y值;即。

  

testA:x = 200,y = 200,

     

testB:x = 200,y = 400

插入tests后:

  

testA:x = 200,y = 200,

     

testB:x = 400,y = 200

而不是tests中的实例。

3 个答案:

答案 0 :(得分:3)

你的比较器是正确的。但是,如果将Test对象添加到集合中会更改其成员变量,例如,您遇到了更大的问题。 “testB:x = 400,y = 200” - &gt; “testB:x = 200,y = 400”。我猜你的问题在于你没有包含的代码(也许是一个拙劣的构造函数?)。

答案 1 :(得分:0)

你尝试过两个以上的元素吗?不止一次,我只是简单地将事情倒退,直到后来才意识到这一点。

答案 2 :(得分:0)

我的猜测是使用double比较==的确切相等可能是个问题。见What's wrong with using == to compare floats in Java?