这可能是一个简单的问题,但我有两个数组,每个数组大约 1000 个元素,它们被称为posXArray
and posYArray
。我想按posYArray
数字排序(首先是最小的数字),但我希望元素posXArray
对它们应用相同的操作......
例如,如果元素 [56] ofposYArray
是最小的一个,我希望元素 [56] ofposXArray
也被移动到 [0]。
这是如何以简单/好的方式在 Java 中实现的?
非常感谢您的帮助!
由于数组似乎包含 X 和 Y 坐标,也许更好的选择是创建一个包含这两个值的坐标类,实现Comparable
并使用内置算法对单个数组进行排序?
创建一个类,如:
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
创建一个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
.
您可以实现您选择的任何排序算法,仅对第一个 (posXArray) 进行比较检查,然后同时交换两个数组中元素的位置。