在java中,是否有函数在索引i和索引j(两者都包含)之间的数组中执行循环左移

在java中,是否有函数在索引i和索引j(两者都包含)之间的数组中执行循环左移,java,arrays,function,Java,Arrays,Function,我想在索引I和索引j(包括I和j)之间的数组中执行循环左移 例如:考虑数组A,例如 int[] A = {1, 2, 3, 4, 5}; 如果我想在给定数组A中执行0索引I和2索引j之间的循环左移,则输出为: A = {2, 3, 1, 4, 5} java中是否有任何内置函数可以执行这种类型的操作 我不是问如何将数组左移位n次。我的问题是循环左移数组中的一些元素,正如我通过示例所示 是的,它有一个内置功能: 比如说, Collections.rotate(Arrays.asList(A).

我想在索引I和索引j(包括I和j)之间的数组中执行循环左移

例如:考虑数组A,例如

int[] A = {1, 2, 3, 4, 5};
如果我想在给定数组A中执行0索引I和2索引j之间的循环左移,则输出为:

A = {2, 3, 1, 4, 5}
java中是否有任何内置函数可以执行这种类型的操作


我不是问如何将数组左移位n次。我的问题是循环左移数组中的一些元素,正如我通过示例所示

是的,它有一个内置功能:

比如说,

Collections.rotate(Arrays.asList(A).subList(i, j+1), -1);
更新:


这不直接适用于基元数组,因为arrays.asList不为您执行装箱操作。您需要以某种方式创建一个整数[]或列表,这不是一种非常优雅的方法。

对于集合,有许多操作可用。 对于数组,类arrays提供copyOfRange和其他方法, 但现场操作不符合要求。你可以做:

int[] a = {1, 2, 3, 4, 5};
final int lwb = 0;
final int upb = 2;
用一个lambda:

int alwb = a[lwb];
Arrays.setAll(a, i -> 
    i < lwb || i > upb ? a[i]
    i < upb -> a[i+1] : alwb
);

此函数在整数数组上使用时会出现越界异常,但在字符串上可以正常工作array@meisner97这是因为Arrays.asList不适用于基元类型数组。看见
int alwb = a[lwb];
System.arraycopy(a, lwb + 1, a, lwb, upb - lwb - 1);
a[upb] = alwb;