【发布时间】:2012-03-21 08:46:45
【问题描述】:
我有一个对象Test,它有两个属性double x 和double y。我想将这些对象添加到SortedSet,保持集合在Test 的x 上按ASC 顺序排序。如果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 值进行排序;即
测试A:x=200,y=200,
测试B:x=200,y=400
插入tests后:
测试A:x=200,y=200,
测试B:x=400,y=200
而不是tests 中的实例。
【问题讨论】:
-
你能把
Test.equals的代码贴出来吗?顺便说一句,测试if (o1.getXpos() == o2.getXpos())是隐含的,因为这两个x值既不是<也不是>,假设它们是实数。
标签: java sorting set sortedset