是否有一种简单的方法可以在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]
答案 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)
使用Util.Collections.swap
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#swap(java.util.List,int,int)