LinkedList против ArrayList на конкретном примере android [дубликат]

этот вопрос уже есть ответ здесь:

Я возвращаю список из моего A класса. Я хочу удалить первый элемент из списка и добавить его в качестве последнего элемента в одном списке. Я сделал это таким образом.

myList.add(myList.get(0));
myList.remove(0);

в целевое оборудование-ОС Android. Мне мой код A класс таким образом, что она возвращает ArrayList или LinkedList? Что было бы лучше для следующих сценариев:

  1. myList всегда имеет 100 элементов

  2. myList всегда имеет 10 элементов

может я вижу проблему там, где ее нет. Как вы думаете, я не должен заботиться о производительности в этом случае, так как размер проблемы (как для 1, так и для 2) маленький?

Я знаю поговорку "преждевременная оптимизация-корень всего зла". Вот почему я колеблюсь, прежде чем изменить свою имплантацию (как сейчас, мой A object возвращает ArrayList).

1 ответов


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

ответ LinkedList добавить способ дает O(1) производительность в то время как ArrayList дает O(n) в худшем случае. LinkedList быстрее. Он будет просто ссылаться на узлы, поэтому первый из них исчезает:


Кроме того, ArrayList хорошо для записи-один раз-чтение-много или аппендеров, но плохо при добавлении/удалении спереди или посередине.

enter image description here

например, удаление элемента из связанного списка расходов O(1), при этом для массива (список массивов) стоит O(n).

но, это не всегда правило, как bigoh пост гласит:

Big-oh notation может дать очень хорошие идеи о производительности для больших объемов данных, но единственный реальный способ узнать наверняка-это попробовать его с большими наборами данных. Могут быть проблемы с производительностью, которые не учитываются нотацией big-oh, например, влияние на подкачку по мере роста использования виртуальной памяти. Хотя контрольные показатели лучше, они не выполнимы в процессе проектирования, поэтому большой анализ сложности-это выбор.

вышеуказанное подтверждено с этой пост, где LinkedList также очень медленно.

наконец, для дальнейшего / будущего использования, пожалуйста, взгляните на сравнение вариантов их использования, согласно javaconceptoftheday.com:enter image description here

References
http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html