在Java列表中重新排列索引

时间:2019-02-15 13:13:09

标签: java list indexing

想象一下,在Java <1,2,3,4,5>中有一个由索引(1-5)指定的列表。

如果我想将索引2(2)上的项目移到索引4并将列表重新排列为<1、3、4、2、5>。

是否有简单的方法/收集框架来实现? LinkedList似乎是一种解决方案。

3 个答案:

答案 0 :(得分:5)

使用Collections::swap方法

List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4));
Collections.swap(list, 1,3);    // will swap the elements at the specified positions

如果您只想将元素移动到某个位置,请尝试:

list.add(2, list.remove(0));    // move the item from index 0 to index 2

答案 1 :(得分:1)

由于您不想交换2个项目,而是删除一个项目然后在以后插入它,您可以使用以下方法:

public static <T> void move(List<T> list, int i, int j) {
    list.add(j, list.remove(i));
}

这利用了List.add(int, T)方法和方法List.remove(int),该方法将项目插入到特定索引处的列表中,该方法将删除给定索引处的元素并将其返回。

另一种方法是使用Collections.rotate()List.sublist()

 public static <T> void move(List<T> list, int i, int j) {
    Collections.rotate(list.sublist(i, j), -1);
}

答案 2 :(得分:0)

您面临的问题之一是,出于实际目的,使用Set会将自己限制为无序的HashSet或有序的TreeSet。当您谈论更改索引时,您暗中在谈论一种不同类型的集合。是的,对于您指定顺序的集合,列表是一个不错的选择。

此外,请记住,Java中的索引是基于0的,因此一旦按所需顺序列出了List,例如List <1、3、4、2、5>,则1在索引0、2中将会在索引3中,依此类推。