JAVA/JVM – Kolekcje i ich wydajność

Cześć
w dzisiejszym artykule opowiem trochę o kolekcjach, o ich różnych implementacjach oraz trochę o wydajności (bardzo częste pytanie na rozmowach kwalifikacyjnych)

Co to są kolekcje

Kolekcje  w języku Java to takie byty które rozszerzają interfejs Collection

Rodzaje kolekcji

Listy (java.util.List)
– w przeciwieństwie do tablicy programista nie musi się martwic o jej rozmiar (jest dynamiczny)
– jeden element może występować kilka razy na różnych pozycjach
Zbiory (java.util.Set)
– mają tylko unikalne elementy (ten sam obiekt nie może się pojawić dwa razy)
– kolejność dodawania elementów do zbiorów nie ma znaczenia bo i tak w momencie iterowania po zbiorze możemy dostać inna kolejność (są implementacje w których mamy zachowany porządek elementów ale to nie jest cecha charakterystyczna zbioru)
Kolejki (java.util.Queue)
– listy o por zadku przetwarzania FIFO(First in, first out) co znaczy ze elementy zawsze dodawane są na koniec kolejki końca (wyjątek kolejki priorytetowe0

Najpopularniejsze implementacje

 

Listy

ArrayList – implementacja oparta na tablicy (stąd nazwa). Bardzo dobra, jeżeli operacje odczytu losowych elementów wykonujemy dużo częściej niż operacje dodawania czy usuwania
LinkedList – dane są ze sobą „powiązane”, dlatego lepsza w momencie, w którym częściej dodajemy elementy i iterujemy po niej

Zbiory

HashSet – oparta o hash tablice. Nie gwarantuje ze przy każdej iteracji zbiory kolejność będzie taka sama
TreeSet – oparta na strukturze drzewa. Posortowana w naturalnym porządku (jest możliwość ustalenia porządku elementów przy użyciu interfejsu Comparator)

Kolejki

ArrayDeque – nie ma ograniczeń rozmiaru oraz nie jest bezpieczna wątkowo
PriorityQueue – wyjątek o którym wspominałem wcześniej – co prawda jest to kolejka ale elementy są przechowywane w naturalnym porządku (tutaj tez możemy to zmienić przy użyciu interfejsu Comparator).

Wydajność

Jeżeli chodzi wydajność kolekcji to bardzo polecam artykuł:
http://infotechgems.blogspot.ie/2011/11/java-collections-performance-time.html

 

Listy

Zbiory

Kolejki

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *