ArrayList<Integer> obj = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
Collections.rotate(obj,+1);
Collections.rotate(obj,+2);
如果我使用集合旋转arrayList,它将旋转原始数组。 我需要旋转特定的索引并将其保存在下一个索引/所需索引中,而又不影响原始索引吗?
就像下面一样,都在同一阵列中
input:
1
2
3
4
5
output:
1 5 4
2 1 5
3 2 1
4 3 2
5 4 3
现在我正在做这样的事情,如下
ArrayList<Integer> arraySec = new ArrayList<Integer>();
ArrayList<Integer> arrayThrd = new ArrayList<Integer>();
arraySec.addAll(obj);
Collections.rotate(arraySec,+1);
arrayThrd.addAll(arraySec);
Collections.rotate(arrayThrd,+1);
因为这个原因,每个索引需要很多数组,所以要超过5个数组。旋转并作为其副本而不是原始副本的其他任何方式
答案 0 :(得分:0)
如果Collections.rotate
方法未返回原始列表的新副本,请自己编写一个!
static <T> ArrayList<T> rotate(ArrayList<T> list, int distance) {
ArrayList<T> newList = new ArrayList<>(list);
Collections.rotate(newList, distance);
return newList;
}
您可以像这样使用它来打印所需的输出:
ArrayList<Integer> obj = new ArrayList<>(Arrays.asList(3,6,4,1,9));
List<ArrayList<Integer>> listOfArrayLists =
IntStream.range(0, obj.size()) // replace obj.size() with however many rotations you want
.mapToObj(x -> rotate(obj, x))
.collect(Collectors.toList());
for (int i = 0 ; i < listOfArrayLists.get(0).size() ; i++) {
for (ArrayList<Integer> listOfArrayList : listOfArrayLists) {
System.out.print(listOfArrayList.get(i));
System.out.print(" ");
}
System.out.println();
}
如果您实际上想以这种“转置”方式打印 all 阵列列表的旋转,那么您实际上并不需要这么多新的阵列列表!如果尚未注意到,则输出的第一行与将输入数组列表反转并旋转1的相同。第二行是将输入反转并旋转2的输入,依此类推。因此,这将产生完全相同的结果:
Collections.reverse(obj);
for (int i = 0 ; i < obj.size() ; i++) {
Collections.rotate(obj, 1);
for (Integer j : obj) {
System.out.print(j);
System.out.print(" ");
}
System.out.println();
}