W momencie kiedy mamy już omówione dwa bardzo ważne koncepty, interfejsy oraz klasy abstrakcyjne, czas przejść do kolejnej niezmiernie istotnej części. Dziś porozmawiamy o kolekcjach w Javie.
01. O co właściwie chodzi?
Kolekcje w Javie są strukturą danych (podobnie jak tablice!), służą do przechowywania, oraz manipulowania grupą obiektów. To tyle w telegraficznym skrócie, jednak ten temat jest naprawdę ogromny oraz niezmiernie ważny! Z kolekcjami będziesz mieć do czynienia praktycznie cały czas! Dlatego jest niezmiernie ważne aby ten temat dobrze opanować.
02. Jakie posiadamy kolekcje w Javie?
W Javie istnieje interfejs o nazwie Collection (jak by inaczej prawda 😉 ?) Rozszerzają go kolejne interfejsy List, Set oraz Queue , te interfejsy stanowią podstawę kolekcji w Javie. Oczywiście to nie wszystko! Istnieją jeszcze inne interfejsy oraz sporo klas które je implementują.
Ciężko opisać wszystkie zależności, zdecydowanie jedne obrazek zastępuje więcej niż tysiąc słów!

Powyższy schemat nie przedstawia wszystkiego! W skład wchodzi jeszcze wiele klas abstrakcyjnych, rozrysowanie wszystkiego zajęło by naprawdę wiele czasu 😉 Nie o to jednak chodzi! Schemat przedstawia całkiem porządnie jakie mamy kolekcje:
- Sety
- Listy
- Kolejki
Warto wspomnieć jeszcze o mapach. Mapy są strukturą danych która przechowuje elementy w sposób klucz – wartość. Jeśli bardzo restrykcyjnie podejść do tematu, mapy nie zaliczamy do kolekcji. Mapa nie implementuje interfejsu Collection, jednak bardzo często w kontekście rozmów o kolekcjach w Javie mówi się również o mapach (ze względu na to iż jest to struktura danych 😉 )
/**
Tekst będzie zawierać bardzo dużo informacji! Tak jak wspomniałem na początku, jest to bardzo obszerny temat. W tym wpisie przedstawię ogólny zarys związany z każdym elementem. W kolejnych wpisach zajmiemy się każdym elementem osobno! Malutkimi kroczkami!
**/
03. Sety
Set definiuje unikalny zbiór elementów, wykorzystuje do tego metodę equals . W prostych słowach Set nie może przechowywać dwóch takich samych obiektów (takich dla których equals jest true)
Elementy w Secie nie posiadają indexu pod którym można by odnieść się do konkretnego elementu (mam na myśli tutaj sytuację jak w tablicy gdzie możemy odnieść się do konkretnego indexu), dostęp do elementów odbywa się za pomocą iteratora.
Podstawową implementacją jest HashSet, który jest używany w większości przypadków. HashSet wykorzystuje metodę hashCode aby określić jak dany obiekt jest przechowywany. Nie mamy w tym przypadku wpływu na to jak elementy są przechowywane, element dodany jako któryś z kolei, podczas iterowania może być pierwszy!
LinkedHashSet zapewnia nam że elementy będą przechowywane w kolejności jakiej zostaną dodane.
TreeSet zapewnia nam że dodane elementy będą posortowane. W jaki sposób będą posortowane? Obiekty trzymane w TreeSecie powinny implementować interfejs Comparable który posiada tylko jedną metodę compareTo która mówi o tym czy dany obiekt jest większy, równy czy mniejszy od innego. Jeśli chcemy przechować w TreeSecie obiekty które nie implementują tego interfejsu, podczas tworzenia TreeSetu musimy podać w jaki sposób obiekty będą porównywane.
04. Listy
Lista w odróżnieniu od setów może przechowywać duplikaty (dokładnie takie same obiekty), kolejność przechowywania elementów zależy od ich dodania do listy.
Podstawową implementacją jest ArrayList, pod spodem leży tak naprawdę tablica 😊 Drugą popularną implementacją jest LinkedList, różnica pomiędzy tymi dwiema implementacjami jest w wydajności podczas określonych operacji.
O szczegółach porozmawiamy w osobnym wpisie 😉
05. Kolejki (Queue)
Kolejka wygląda mniej więcej tak jak w sklepie do kasy 😉 Osoby się ustawiają w kolejce, pierwsza osoba jest obsługiwana, następnie przechodzimy do kolejnej osoby.
Jest to pewne uproszczenie tematu ponieważ z wykorzystaniem konkretnej implementacji (ArrayDeque) możemy obsługiwać z początku jak i końca kolejki.
PriorityQueue działa bardzo podobnie jak TreeSet, wymagany jest komperator i według niego elementy są przechowywane w kolejce. Różnicą jest że ta kolejka może przechowywać duplikaty!
06. Mapy
Mapa jest strukturą która przechowuje elementy w sposób klucz – wartość. Podstawową implementacją jest HashMap.
Podsumowanie
W tym wpisie nie będę wchodzić w szczegóły. Gdybym chciał zrobić to w jednym wpisie byłby on zdecydowanie za długi. W kolejnych wpisach skoncentruje się na poszczególnych elementach. Setach, Listach, Kolejkach oraz Mapach. W Każdym wpisie omówię najważniejsze koncepcje związane z danym elementem. Czeka nas całkiem długa podróż! 😉