Jest totalnie bezużyteczna...
Niby ma swoje zalety jak się dodaje coś z przodu lub z tyłu, ale ArrayDeque potrafi to samo, a jest lepsza pod każdym innym względem.
I nie chodzi o to, że LinkedList jako struktura danych jest zła, bo jest super i ma masę zalet, ale tak się składa, że jej implementacja w Java'ie nie ma dziś praktycznie sensu i zastosowania.
No bo tak, jak chodzi o dostępy to jedyne co ma w O(1) to dodaj z przodu i dodaj z tyłu, nie ma dostępu swobodnego do elementów czyli dotarcie do elementu zajmuje O(N), nawet coś co teoretycznie powinno zająć O(1) czyli połączenie 2 LinkedList w Java'owej implementacji zajmuje O(N) (bo po drodze jest budowana tablica z dodawaną listą...).
Jak samemu się implementuje LinkedList to można robić cuda, ożeń to z HashMap i możesz zbudować fajny cache LRU (OK, ale prościej użyć LinkedHashMap ;-)).
Ktoś może powiedzieć, że LinkedList jest fajna z punktu widzenia pamięci.... ale też nie, jej narzut staje się większy od ArrayList już chyba po 4 elementach... narzut na 1 element w Java 17 64 bity w ArrayList to jest 8 bajtów (czyli tyle ile kosztuje referencja w tablicy), w LinkedList to 40 bajtów (1 referencja do elementu, 1 do prev, jedna do next i szczerze nawet nie wiem co to jest pozostałe 16 bajtów).
OK, przewagą nad ArrayList jest to, że dodanie elementu na końcu ZAWSZE* jest O(1), a w ArrayList raz ma jakiś czas zajmuje O(N), ale już zamortyzowany czas dla ArrayList to też O(1) (i chyba z mniejsza stałą).
No dobrze w porównaniu z ArrayList umie też dodawać w O(1) z przodu, ale z zastrzeżeniem, że chodzi o czas zamortyzowany to ArrayDeque też to umie....
Chociaż niby ten narzut pamięciowy jest tak sobie ważny, jak to jest List<Integer> to zajmuje rzeczywiście dużo więcej miejsca, ale jak to są jakieś bardziej złożone obiekty, z których każdy zajmuje dużo miejsca to te 50 bajtów na node można darować... chociaż łatwiej jednak darować te 8 bajtów z ArrayList.
Tak trochę mam wrażenie, że LinkedList z nami została bo trzeba ją było zaimplementować, przydawała się kiedyś jako stos i może kolejka i tyle....
Stąd jak widzę użycie gdzieś LinkedList w Java'ie to dla mnie to jest już code smell ;-)
A co do misia koali... to tutaj polecam ;-)
* - ZAWSZE z pewnymi wyjątkami, jak będzie GC to i tak zajmie więcej ;-)
Podobne postybeta
Po Devoxx'ie
Jak z metody size() w List w Java'ie dostać ujemną liczbę? ;-)
Java 32 bit vs. Java 64 bit
Go dla Java'owca ;-) odcinek 2 "kontenery dwa ;-)"
Referencje w Java'ie
Brak komentarzy:
Prześlij komentarz