2012-04-23 3 views
2

Я хочу изменить java.util.LinkedList<Integer> используя доступные методы.
Глядя в методах, предусмотренных и Iterators я не мог увидеть другой вариант, кроме следующих:Лучший способ обратить вспять java.util.LinkedList (по возможности, если это возможно)

int i = list.size(); 
int pos = 0; 
while(i-- > 1){ 
    Integer n = list.removeLast(); 
    list.add(pos++, n);   
} 

Но, конечно же, должно быть лучше. Я имею в виду, что не рекомендуется изменять список за пределами итератора, но я не мог понять, как я могу использовать его здесь, не создавая новый список.
Есть ли лучший способ?

+0

Есть много вопросов по этому поводу уже. Вам нужно искать. – sgowd

ответ

14

Использовать импорт java.util.Collections;

Collections.reverse(list); 
+0

Оптимизирован ли этот файл для связанного списка? –

+1

Да, он делает различие списков RandomAccess и связанных списков. Посмотрите на источники;) –

2

Там есть метод API для этого.

Collections.reverse(yourList);

См http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#reverse%28java.util.List%29.

Если по какой-то причине вы хотите сделать это самостоятельно, это, кажется, лучший способ:

List<T> reversed = new LinkedList<T>(); 
while(!yourList.isEmpty()) reversed.add(yourList.removeLast()); 
+0

Второй пример отсутствует на месте – Cratylus

+0

Ни один из них не на месте. Это просто общие решения, которые они вам дают, они работают для любого списка. Но, к сожалению, после осмотра я пришел к выводу, что вы не сможете сделать это на месте с помощью LinkedList. Вы можете искать себя в своем [исходном коде] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/LinkedList.java). Невозможно получить эти объекты «Entry», которые образуют основу списка. –

+0

@ user384706 Фактически, метод api на месте (извините, допустил ошибку в моем примере использования). –

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