给定一个排序的对象数组,而顺序基于某个对象属性。(排序是通过使用 Collections.sort() 和自定义比较器然后调用 toArray() 的列表完成的)。
不允许 SomeObject 的重复实例(“重复”在这方面取决于 SomeObject 中的多个属性值),但 SomeObject 的多个实例可能具有相同的属性 1 值,用于排序。
public SomeObject {
public attribute1;
public attribute2;
}
List<SomeObject> list = ...
Collections.sort(list, new Comparator<SomeObject>() {
@Override
public int compare(SomeObject v1, SomeObject v2) {
if (v1.attribute1 > v2.attribute1) {
return 1;
} else if (v1.attribute1 < v2.attribute1) {
return -1;
} else
return 0;
}
});
SomeObject[] array = list.toArray(new SomeObject[0]);
如何有效地检查基于某个属性的某个对象是否在该数组中,同时还能够“标记”在以前的查找中已经找到的对象(例如,只需从数组中删除它们;已经找到的对象不需要稍后访问)。
如果没有后面的要求,可以使用自定义比较器执行 Arrays.binarySearch()。但显然,当一个人想要删除已经找到的对象时,它是行不通的。