Java重新排列基于元素编号的数组

时间:2011-12-20 07:25:51

标签: java arrays for-loop

这是我的阵列:

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}

2 个答案:

答案 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)

另一种解决方案可能是使用asList方法将数组转换为列表,只需使用removeadd方法:

List<Integer> myList = new ArrayList<Integer>(Arrays.asList(myArray));
myList.add(myList.remove(myIndex));