首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中,有没有什么函数可以在索引i和索引j(包括i和j)之间执行循环左移呢?

在java中,有没有什么函数可以在索引i和索引j(包括i和j)之间执行循环左移呢?
EN

Stack Overflow用户
提问于 2019-03-14 00:38:03
回答 2查看 65关注 0票数 0

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

例如:考虑数组A,例如,

代码语言:javascript
复制
int[] A = {1, 2, 3, 4, 5};

如果我想在给定的数组A中执行0(索引i)和2(索引j)之间的循环左移,输出是:

代码语言:javascript
复制
A = {2, 3, 1, 4, 5}

java中有没有内置的函数可以执行这种类型的操作。

我不是在问如何将一个数组循环左移n次。我的问题是循环左移数组中的一些元素,正如我在示例中所展示的那样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-14 00:58:51

是的,它有一个内置函数:Collections.rotate

例如,

代码语言:javascript
复制
Collections.rotate(Arrays.asList(A).subList(i, j+1), -1);

更新:

这不能直接用于原始数组,因为Arrays.asList不会为您执行装箱操作。您需要以某种方式创建一个Integer[]List<Integer>,这并不是一种非常优雅的方法。

票数 1
EN

Stack Overflow用户

发布于 2019-03-14 01:07:43

对于集合,有许多可用的操作。对于数组,Arrays类提供了copyOfRange和其他方法,但没有提供所需的就地操作。您可以执行以下操作:

代码语言:javascript
复制
int[] a = {1, 2, 3, 4, 5};
final int lwb = 0;
final int upb = 2;

使用lambda:

代码语言:javascript
复制
int alwb = a[lwb];
Arrays.setAll(a, i -> 
    i < lwb || i > upb ? a[i]
    i < upb -> a[i+1] : alwb
);

或者最好的:

代码语言:javascript
复制
int alwb = a[lwb];
System.arraycopy(a, lwb + 1, a, lwb, upb - lwb - 1);
a[upb] = alwb;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55146987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档