Самый быстрый и эффективный способ пройти ArrayList в обратном порядке - PullRequest
7 голосов
/ 31 мая 2011

Существуют ли более быстрые и эффективные средства для этого, чем использование ListIterator?

ListIterator<Integer> itr = list.listIterator(list.size());
while(itr.hasPrevious()){
    System.out.println(itr.previous());
}

Ответы [ 5 ]

10 голосов
/ 31 мая 2011

В зависимости от реализации List и ListIterator следующее может быть (немного) быстрее.

List l;
for (int i = l.size()-1; i >=0; i--) {
    System.out.println(l.get(i));
}

Это может быть быстрее для ArrayList, но почти наверняка будет медленнеедля LinkedList.

Лучше всего просто использовать итератор.

Почти наверняка, что любая работа, которую вы выполняете в цикле, сведет на нет любую производительность, полученную без использованияитератор.

2 голосов
/ 31 мая 2011

В зависимости от класса реализации списка, может быть более эффективно перевернуть список (используя Collections.reverse), использовать прямой итератор, а затем снова перевернуть список, чтобы восстановить его.

Обратите внимание, что java.util.LinkedList - это список double , так что эта стратегия не нужна; использование hasPrevious и previous столь же эффективно, как и движение вперед. Я думаю, что это верно для каждой реализации списка Stock в java.util.

2 голосов
/ 31 мая 2011

Теоретически, использование простого основанного на индексе цикла for может быть быстрее на минимальную величину, поскольку нет никаких накладных расходов на вызов метода для теста, но на практике это очень, очень маловероятно, чтобы быть значительным и может вообще не проявляться вообще.

Гораздо важнее, чтобы решение на основе итераторов было более понятным и эффективно работало со связанными списками, а не только с ArrayLists

1 голос
/ 31 мая 2011

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

0 голосов
/ 29 мая 2016

Вы можете повернуть на одну строку, которая

Collections.reverse (список);

ArrayList arrayList = new ArrayList();

arrayList.add("A");
arrayList.add("B");

System.out.println("Before Reverse Order : " + arrayList);

Collections.reverse(arrayList);

System.out.println("After Reverse : " + arrayList);

выход

Before Reverse Order : [A, B]
After Reverse : [B, A]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...