在Java中重新排列数组

在Java中重新排列数组,java,arrays,arraylist,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} 为此: {0, 1, 2, 3, 5, 6, 7, 8, 9, 4} 像这样使用。 int start = 4; int temp = myArray[start]; for(int

如果我有一个数组:

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}
为此:

{0, 1, 2, 3, 5, 6, 7, 8, 9, 4}
像这样使用。

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;
int start=4;
int temp=myArray[start];
for(int i=start;i
这是我能猜到的最快的方法…

这个怎么样:

int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.arraycopy(myArray, 5, myArray, 4, 5);
myArray[myArray.length-1] = 4;
在上面的代码中,我使用该方法复制数组中从索引5到索引4的5个数字的范围,然后在最后一个位置简单地设置一个4

请注意,使用
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}
sendBack(myArray, 4);
// now myArray is {0, 1, 2, 3, 5, 6, 7, 8, 9, 4}