Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何";“复制”;是否将数组操作复制到另一个数组?_Java_Arrays - Fatal编程技术网

Java 如何";“复制”;是否将数组操作复制到另一个数组?

Java 如何";“复制”;是否将数组操作复制到另一个数组?,java,arrays,Java,Arrays,这可能是一个简单的问题,但我有两个数组,每个数组大约有1000个元素,它们被称为posXArray和posYArray。我想对posYArray进行数字排序(首先是最小的数字),但我想对posXArray的元素应用相同的操作 例如,如果posYArray的元素[56]是最小的元素,我希望posXArray的元素[56]也移动到[0] 如何在Java中以简单/良好的方式实现这一点 非常感谢你的帮助 由于数组似乎包含X和Y坐标,也许更好的选择是创建一个包含这两个值的坐标类,实现compariable

这可能是一个简单的问题,但我有两个数组,每个数组大约有1000个元素,它们被称为
posXArray
posYArray
。我想对
posYArray
进行数字排序(首先是最小的数字),但我想对
posXArray
的元素应用相同的操作

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

如何在Java中以简单/良好的方式实现这一点


非常感谢你的帮助

由于数组似乎包含X和Y坐标,也许更好的选择是创建一个包含这两个值的坐标类,实现
compariable
,只需使用内置算法进行单个数组排序?

您可以实现您选择的任何排序算法,首先进行比较检查(posXArray),然后同时交换两个数组中元素的位置。

创建一个类,如:

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实现了可比较的{
int x;
int-y;
@凌驾
公共整数比较(XYPos o){
int res=this.y-o.y;
如果(res==0){
res=这个.x-o.x;
}
返回res;
}
}
然后:

  • 将两个数组转换为一个
    XYPos
  • 分类
  • 使用排序数组中的值更新2个原始数组

  • 创建一个长度相同的
    整数[]idx
    ,并用数字0到999(或任何数字)填充它,然后使用一个比较器对该数组进行排序

    public int compare(Integer a, Integer b) {
      return posYArray[a] - posYArray[b];
    }
    
    这将为您提供一个到其他数组的索引数组,即最小的Y值将是
    posYArray[idx[0]]
    ,其对应的X将是
    posXArray[idx[0]]
    ,等等。如果您不想保持间接性,您可以通过
    idx
    值对原始数组重新排序


    如果您经常做这类事情,您可能希望了解哪些提供了直接对原始类型(如
    int
    )进行操作的收集和比较类型,从而避免了对整数进行装箱和取消装箱的需要。

    感谢您的回答!这当然是一种可能性,而且会起作用-简单:我认为是这样,很好:同意,不是这样t(事实上,我对建议创建一个类的答案之一投了赞成票):)