有没有一种简单的方法来交换列表中的 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]
这很容易,但并不短:
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);
}
}
}
如果您不想创建新集合。
如果您对索引没问题,这可以通过使用 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 的元素。
使用 Util.Collections.swap
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#swap(java.util.List , int, int)