LinkedList против ArrayList на конкретном примере android [дубликат]
этот вопрос уже есть ответ здесь:
Я возвращаю список из моего A
класса. Я хочу удалить первый элемент из списка и добавить его в качестве последнего элемента в одном списке. Я сделал это таким образом.
myList.add(myList.get(0));
myList.remove(0);
в целевое оборудование-ОС Android. Мне мой код A
класс таким образом, что она возвращает ArrayList
или LinkedList
? Что было бы лучше для следующих сценариев:
myList всегда имеет 100 элементов
myList всегда имеет 10 элементов
может я вижу проблему там, где ее нет. Как вы думаете, я не должен заботиться о производительности в этом случае, так как размер проблемы (как для 1, так и для 2) маленький?
Я знаю поговорку "преждевременная оптимизация-корень всего зла". Вот почему я колеблюсь, прежде чем изменить свою имплантацию (как сейчас, мой A
object возвращает ArrayList).
1 ответов
короткий ответ: вы должны пойти на LinkedList
Если вы часто добавляете/удаляете/обновляете элемент, особенно в случае первых / последних элементов, так как он содержит указатель на первый и последний узел
ответ LinkedList
добавить способ дает O(1)
производительность в то время как ArrayList дает O(n)
в худшем случае.
LinkedList
быстрее. Он будет просто ссылаться на узлы, поэтому первый из них исчезает:
Кроме того, ArrayList
хорошо для записи-один раз-чтение-много или аппендеров, но плохо при добавлении/удалении спереди или посередине.
например, удаление элемента из связанного списка расходов O(1)
, при этом для массива (список массивов) стоит O(n)
.
но, это не всегда правило, как bigoh пост гласит:
Big-oh notation может дать очень хорошие идеи о производительности для больших объемов данных, но единственный реальный способ узнать наверняка-это попробовать его с большими наборами данных. Могут быть проблемы с производительностью, которые не учитываются нотацией big-oh, например, влияние на подкачку по мере роста использования виртуальной памяти. Хотя контрольные показатели лучше, они не выполнимы в процессе проектирования, поэтому большой анализ сложности-это выбор.
вышеуказанное подтверждено с этой пост, где LinkedList
также очень медленно.
наконец, для дальнейшего / будущего использования, пожалуйста, взгляните на сравнение вариантов их использования, согласно javaconceptoftheday.com:
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