2013-05-04 2 views

ответ

1

Если вы хорошо с индексами, это можно сделать с помощью функции Подсписок несколько файлов и создания нового объекта списка, как показано ниже ...

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.

+0

Следует также отметить, что вы создаете новый список, а не выполняете замену элементов существующего списка на месте. –

+0

Да, я уже отметил это ... – Buddha

+0

Я все еще думаю, что использование swap - лучший вариант, но это решение должно работать. – Bill

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

Если вы не хотите, чтобы создать новую коллекцию.

+0

это именно то, что я говорил :) – Bill

+0

+1 для полного решения с in-pla ce swap ... – Buddha

0

Использование Util.Collections.swap

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

+0

Это хороший метод, но это работает только тогда, когда количество элементов в столбцах from и to sublists одинакового размера. и это должно быть сделано для отдельных элементов. – Buddha

+0

Вы можете вызвать функцию swap несколько раз для пары элементов, чтобы делать что угодно. Вы все равно можете использовать один и тот же список вместо создания нового списка ... это всего лишь опция. – Bill

+0

Мне очень хотелось бы увидеть решение, используя несколько свопов. :) – renz

Смежные вопросы