我有一个对象Test
,它有两个属性,double x
和double 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
中的实例。
答案 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?