这可能是一个简单的问题,但我有两个大约1000个元素的数组,它们被称为posXArray
和posYArray
。我想在数字上排序posYArray
(最低数字)但我希望posXArray
的元素应用相同的操作...
例如,如果posYArray
的元素[56]是最小的,我希望posXArray
的元素[56]也被移动到[0]。
如何以简单/好的方式在Java中实现它?
非常感谢你的帮助!
答案 0 :(得分:8)
由于数组似乎包含X和Y坐标,或许更好的选择是创建一个包含两个值的坐标类,实现Comparable
并且只需要一个数组来使用内置算法进行排序? / p>
答案 1 :(得分:2)
创建一个类:
public class XYPos implements Comparable<XYPos> {
int x;
int y;
@Override
public int compareTo(XYPos o) {
int res = this.y - o.y;
if(res == 0) {
res = this.x - o.x;
}
return res;
}
}
然后:
XYPos
答案 2 :(得分:1)
创建一个长度相同的Integer[] idx
,并用数字0到999(或其他)填充,然后使用比较器对此数组进行排序
public int compare(Integer a, Integer b) {
return posYArray[a] - posYArray[b];
}
这将为您提供其他数组的索引数组,即最小的Y值为posYArray[idx[0]]
,其对应的X将为posXArray[idx[0]]
等。如果您不想维护您可以通过idx
值重新排序原始数组。
如果您经常这样做,您可能希望查看fastutil,它提供直接在原始类型(例如int
)上运行的Collection和Comparator类型,从而避免使用盒子和unbox整数。
答案 3 :(得分:0)
你可以实现你选择的任何排序算法,只对第一个(posT数组)进行比较检查,然后同时交换两个数组中元素的位置。