用Java重新排列数组

时间:2011-12-20 02:25:23

标签: java arrays arraylist

如果我有一个数组:

int[] myArray = new int[10]
for (int i = 0; i < myArray.length; i++) {
    myArray[i] = i;
}

//resulting array: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

如何将4个空间后面的所有内容移动到后面并将4个发送到后面?例如:

这样:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

进入这个:

{0, 1, 2, 3, 5, 6, 7, 8, 9, 4}

3 个答案:

答案 0 :(得分:4)

这个怎么样:

int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.arraycopy(myArray, 5, myArray, 4, 5);
myArray[myArray.length-1] = 4;

在上面的代码中,我使用arraycopy方法将从索引5开始的5个数字范围复制到数组中的索引4,然后在最后位置简单地设置4。 / p>

请注意,使用arraycopy比在循环中复制值要快得多,因为它通常实现为复制内存位置的本机操作。

编辑:

更通用的解决方案,一种向阵列发送给阵列中给定位置的方法:

public static void sendBack(int[] array, int idx) {
    int value = array[idx];
    System.arraycopy(array, idx+1, array, idx, array.length-idx-1);
    array[array.length-1] = value;
}

对于您的示例,请将其命名为:

sendBack(myArray, 4);
// now myArray is {0, 1, 2, 3, 5, 6, 7, 8, 9, 4}

答案 1 :(得分:2)

喜欢这个吗?

int start = 4;
int temp = myArray[start];
for(int i = start; i < myArray.length - 1; i++) {
    myArray[i] = myArray[i+1];
}
myArray[myArray.length-1] = temp;

这是我猜的最快的方式......

答案 2 :(得分:1)

使用System.arraycopy