LinkedList czy ArrayList?

Oto jest pytanie...

    Do tej pory nie znałem różnicy, bo na moim poziomie różnica była znikoma. Teraz gdy już trochę zaczynam przejmować się optymalizacją, to to zaczyna mieć dla mnie co raz większe znaczenie.

    No to czas na rozwiązanie zagadki: odpowiedź na tytułowe pytanie brzmi: to zależy.

    Może zacznę od szybkiego rozpisania jak te listy działają:

LinkedList:
  • ma każdy element połączony z kolejnym i poprzednim, więc dostanie się do konkretnego elementu wymaga przejście po każdym elemencie. 
  • dodatkowo komputer musi zarezerwować od razu odpowiednią ilość pamięci dla elementów listy. Jeśli zarezerwuje za mało, to przenosi kolejne elementy w inne miejsce i tam też rezerwuje pamięć i tak dalej. Z tego wynika, że zajmuje więcej pamięci od ArrayListy, bo od razu musi określoną pamięć zarezerwować, co jest średnio optymalne pamięciowo. 
  • Szybciej od ArrayListy zapisuje elementy na konkretnej pozycji i usuwa elementy z listy. 
ArrayListy:
  • Każdy element jest w innym miejscu w pamięci, dzięki czemu zajmuje tylko tyle pamięci ile potrzebuje.
  • Znacznie lepiej radzi sobie z odczytywaniem danych niż LinkedList. Różnica pod względem odczytu jest wręcz przytłaczająca. Delikatnie szybciej dodaje element na końcu.
    To takie najważniejsze rzeczy. Jakiekolwiek różnice przy pobieraniu elementów z listy lub umieszczanie w odpowiednim miejscu są dostrzegalne dopiero gdy lista ma ok 10 000 elementów.  W przypadku iterowania albo dodawania elementu na koniec listy, żeby była zauważalna jakakolwiek różnica to musi być przynajmniej milion elementów. W mniejszych listach różnice są niezauważalne.

    Tutaj jest zestawienie przygotowane przez mojego serdecznego kolegę Dawida Szydę:
    Czyli najlepiej używać się ArrayListy, chyba, że ktoś wie, że będzie bardzo dużo zapisywał i usuwał z listy, a mało pobierał elementów, choć przypuszczam, że to raczej rzadkie przypadki.

    A Ty którą listę preferujesz i dlaczego? Napisz to w komentarzu :)












Komentarze

Popularne posty z tego bloga

IntelliJ: zmiana rozmiaru czcionki scrollem

ThunderBird: jak zrobić professional stopkę