例如,我有一个包含以下内容的数组:a、b、c、d、e、f
我希望结果是:b、c、d、e、f、a
我该怎么做呢?
使用数组复制:
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。
Collections.rotate(Arrays.asList(array), -1);
尝试使用 ArrayList,它有一些很好的方法可以自动转换。尝试
myArrayList.add(0,myArrayList.remove(myArrayList.size()-1))
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]
}
复制数组是另一种解决方案,但是如果您经常旋转数组,我建议不要更改内容或创建新数组,通过定义起始索引,您可以随时更改起始点。