Теоретически, что эффективнее удалять элементы из ArrayList или LinkedList?
Что более эффективно - удалять элементы из ArrayList или LinkedList?
Ответы (3)
«Легче» (то есть более эффективно) удалить их из LinkedList, потому что удаление из ArrayList требует перемещения всех последующих элементов в новую позицию в списке, всем последующим элементам массива должно быть присвоено новое значение. В связном списке нужно переназначить только один указатель (или два в двусвязном списке).
Что ж, удаление элемента из (двусвязного) списка - это O (1). Но удаление из массива потребует, чтобы оставшиеся элементы были сдвинуты на одну позицию в массиве вниз, что составляет O (n).
При этом получение определенного элемента в списке по индексу - O (n), а получение определенного элемента в массиве по индексу - O (1).
Итак, для фактического удаления LinkedList будет лучше. Дополнительную информацию о сравнении Array и LinkedList можно найти здесь.
linkedList.remove(100) - это O (n).
- person sulai; 08.03.2013
ArrayList внутренне использует динамический массив для хранения элементов, поэтому манипуляции с ArrayList происходят медленно, поскольку он внутренне использует массив.
Если какой-либо элемент удаляется из массива, все биты сдвигаются в памяти, в то время как LinkedList внутренне использует двусвязный список для хранения элементов.
Работа с LinkedList выполняется быстрее, чем с ArrayList, поскольку в нем используется двусвязный список, поэтому сдвиг битов в памяти не требуется.