-2

例如,我有一个包含以下内容的数组:a、b、c、d、e、f

我希望结果是:b、c、d、e、f、a

我该怎么做呢?

4

4 回答 4

4

使用数组复制

var t = arr[0];
System.arraycopy(arr, 1, arr, 0, arr.length-1);
arr[arr.length-1] = t;

javadoc 指定此操作是安全的:

如果 src 和 dest 参数引用相同的数组对象,则执行复制,就好像首先将位置 srcPos 到 srcPos+length-1 的分量复制到具有长度分量的临时数组,然后临时数组的内容是通过目标数组的 destPos+length-1 复制到位置 destPos。

于 2013-03-09T17:13:08.843 回答
2
Collections.rotate(Arrays.asList(array), -1);
于 2013-03-09T17:15:18.887 回答
0

尝试使用 ArrayList,它有一些很好的方法可以自动转换。尝试

myArrayList.add(0,myArrayList.remove(myArrayList.size()-1))
于 2013-03-09T17:11:02.290 回答
0

LinkedList 可以快速做到这一点,但在大多数情况下您不需要这样做。相反,在不修改数组内容的情况下定义起始索引要容易得多。

例如,

int start = 5;

for (int i=start, j=0; j<arr.length; i++, j++) {
    if (i == arr.length) {
        i = 0;
    }
    // do something with arr[i]
}

复制数组是另一种解决方案,但是如果您经常旋转数组,我建议不要更改内容或创建新数组,通过定义起始索引,您可以随时更改起始点。

于 2013-03-09T17:25:26.467 回答