在List <myobject> </myobject>中交换子列表

时间:2013-05-04 13:19:38

标签: java list swap sublist

是否有一种简单的方法可以在List中交换2个子列表。 例如:

[0 1 2 3 4 5 6 7 8 9 10 11] --> [0 1 8 9 10 4 5 6 7 2 3 11]
  --> Sublist1= [2 3]
  --> Sublist2= [8 9 10]

3 个答案:

答案 0 :(得分:1)

这很容易,但不简短:

  static <E> void swapSubList(List<E> list, int first1,int last1, int first2, int last2){
        for (int i=first1, j=first2; i<=last1 || j<=last2; i++, j++) {
            if(i<=last1 && j<=last2) {
                Collections.swap(list, i, j);
            }
            else if (i>last1){
                E temp = list.remove(j);
                list.add(i, temp);
            }
            else {
                E temp = list.remove(i);
                list.add(j, temp);
            }
        }
    }

如果您不想创建新集合。

答案 1 :(得分:1)

如果您对索引没问题,可以通过使用subList函数多个文件并创建一个新的列表对象来完成,如下所示......

List<Integer> newList = new ArrayList<Integer>(myList.subList(0, 4));
newList.addAll(myList.subList(7, 9));
newList.addAll(myList.subList(4, 7));
newList.addAll(myList.subList(9, 12));

这里我们将索引4转换为6,索引为7到8

如果只想使用元素,首先使用元素查找subList的索引并使用上述过程。

不要与subList函数的endIndex混淆... fromIndex - subList的低端点(包括) toIndex - subList的高端点(独占) 所以如果你在subList函数中提到7,9,它意味着从索引7到索引9以下的元素的所有元素。

答案 2 :(得分:0)