Есть ли простой способ поменять 2 списка в списке. Пример:Подменю подписок в списке <MyObject>
[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]
Есть ли простой способ поменять 2 списка в списке. Пример:Подменю подписок в списке <MyObject>
[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]
Если вы хорошо с индексами, это можно сделать с помощью функции Подсписок несколько файлов и создания нового объекта списка, как показано ниже ...
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
Если вы хотите сделать это только с использованием элементов, сначала используйте элементы для поиска индексов сублиста и используйте описанную выше процедуру.
Не запутаться с ENDINDEX функции Подсписка ... fromIndex - низкая конечная точка (включительно) подсписка toIndex - высокая конечная точка (эксклюзив) из подсписке , так что если вы упоминаете 7,9 подсписка функционировать это означает, что все элементы из индекса 7 до элементов ниже индекса 9.
Это очень просто, но не хватает:
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);
}
}
}
Если вы не хотите, чтобы создать новую коллекцию.
Использование Util.Collections.swap
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#swap(java.util.List, Int, Int)
Это хороший метод, но это работает только тогда, когда количество элементов в столбцах from и to sublists одинакового размера. и это должно быть сделано для отдельных элементов. – Buddha
Вы можете вызвать функцию swap несколько раз для пары элементов, чтобы делать что угодно. Вы все равно можете использовать один и тот же список вместо создания нового списка ... это всего лишь опция. – Bill
Мне очень хотелось бы увидеть решение, используя несколько свопов. :) – renz
Следует также отметить, что вы создаете новый список, а не выполняете замену элементов существующего списка на месте. –
Да, я уже отметил это ... – Buddha
Я все еще думаю, что использование swap - лучший вариант, но это решение должно работать. – Bill