1

有没有一种简单的方法来交换列表中的 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]
4

3 回答 3

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);
            }
        }
    }

如果您不想创建新集合。

于 2013-05-04T13:39:56.790 回答
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 的元素。

于 2013-05-04T13:40:42.467 回答
0

使用 Util.Collections.swap

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#swap(java.util.List , int, int)

于 2013-05-04T13:49:03.413 回答