这是我的阵列:
int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
假设我想将myArray [3](它可以是任何元素)和myArray [6](与此相同)移动到阵列的前面,同时重新排列背面,我该怎么做?例如:
此:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
进入这个:
{3, 6, 0, 1, 2, 4, 5, 7, 8, 9}
答案 0 :(得分:4)
要将索引x
移到前面,您需要:
x
0
复制到x - 1
一个索引,例如System.arrayCopy
0
的值设置为您在第一步中记住的值例如:
public void moveToHead(int[] values, int index)
{
// TODO: Argument validation
int value = values[index];
System.arraycopy(values, 0, values, 1, index - 1);
values[0] = value;
}
请注意System.arraycopy
正确处理复制:
如果src和dest参数引用相同的数组对象,则执行复制,就好像位置srcPos到srcPos + length-1的组件首先被复制到具有长度组件的临时数组,然后是临时数组被复制到目标数组的destPos + length-1的destPos位置。
您的原始示例提到了两个元素 - 虽然您可能可能会提前知道所有这些元素,但是将其建模为两个moveToHead
会更加简单明了调用。您需要注意排序 - 例如,如果您想首先将索引6
移动到头部,则需要移动索引4而不是索引3,以考虑第一步。
答案 1 :(得分:2)