如果我有一个数组:
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}
答案 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)