如何将数组操作“复制”到另一个数组?

时间:2013-04-04 09:01:35

标签: java arrays

这可能是一个简单的问题,但我有两个大约1000个元素的数组,它们被称为posXArrayposYArray。我想在数字上排序posYArray(最低数字)但我希望posXArray的元素应用相同的操作...

例如,如果posYArray的元素[56]是最小的,我希望posXArray的元素[56]也被移动到[0]。

如何以简单/好的方式在Java中实现它?

非常感谢你的帮助!

4 个答案:

答案 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;
    }
}

然后:

  1. 将您的2个数组转换为XYPos
  2. 的一个数组
  3. 排序
  4. 使用排序数组中的值更新您的2个原始数组

答案 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数组)进行比较检查,然后同时交换两个数组中元素的位置。

相关问题