Ответ
O(n) в худшем и среднем случае, где n — количество элементов в списке.
Причина: LinkedList реализован как двусвязный список. Элементы не индексированы в памяти, поэтому для поиска конкретного значения необходимо выполнить линейный обход, начиная с головы (или хвоста) списка.
Пример на Java:
LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");
// Метод indexOf выполняет линейный поиск
int index = list.indexOf("B"); // В худшем случае проверит все n элементов
Рекомендации:
- Если частой операцией является поиск по индексу — используйте
ArrayList(O(1)). - Если нужен быстрый поиск по значению — рассмотрите
HashSet(O(1) в среднем) илиTreeSet(O(log n)).
Ответ 18+ 🔞
Ну слушай, вот сидишь ты такой, пишешь на Java, и думаешь: "А возьму-ка я LinkedList, он же крутой, вставки-удаления за O(1), красота!" А потом тебе вдруг надо найти в нём какой-нибудь элемент, не по индексу, а по значению. И тут начинается пиздец, Карл.
Потому что этот LinkedList — он как тот немой Герасим из рассказа, только вместо "Му-му" он мычит "Ссылка-ссылка". Элементы там разбросаны по памяти, как охуевшие овцы по полю, и чтобы найти одну конкретную овцу по имени "Боря", тебе придётся обойти всё стадо, начиная с первой. Это и есть тот самый O(n) в худшем и среднем случае. Если элемент в хвосте — проебёшься по всему списку. Если в начале — повезло. Но в среднем — нихуя не повезло.
Вот смотри, как это выглядит в коде, тут всё честно:
LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");
// Метод indexOf выполняет линейный поиск
int index = list.indexOf("B"); // В худшем случае проверит все n элементов
Вызвал indexOf("B") — а под капотом, блядь, начинается линейный обход: "Ты 'B'? Нет? Иди нахуй. Ты 'B'? Да? Ну наконец-то, ебанашка!"
Так что, чувак, рекомендации простые, как три копейки:
- Если тебе постоянно надо тыкать пальцем в элемент по номеру — выкинь этот
LinkedListв пизду и бериArrayList. Там доступ по индекту — O(1), то есть моментально, как хуй в сало. - Если поиск по значению — твоя основная головная боль, а вставки/удаления не так часты — тут
LinkedListвообще не катит. Смотри в сторонуHashSet(поиск в среднем O(1), ёпта!) илиTreeSet(O(log n), упорядоченный). Вот это — инструменты, а не мартышлюшка со ссылками.
Короче, выбирай структуру данных с умом, а не потому что название понравилось. А то получится как в той истории: "Муму-муму", а в итоге — утопил производительность, блядь.