Typy złożone – kolekcje

W poprzednich wpisach poznałeś typy proste (int, long, boolean itp), String oraz tablice (jedno i wielowymiarowe). W tym wpisie przyjrzymy się jednym z typów złożonych jakim są kolekcje.

Zacznijmy od tego czym właściwie są kolekcje? Słowo kolekcja oznacza zbiór lub zestaw elementów. Pewnie słyszałeś o kolekcjach obrazów lub znaczków. Zawierają one wiele przedmiotów, często podzielone są one ze względu na styl, okres powstania, wielkość, autora itp. Kolekcje mogą być uporządkowane (bądź nie) według autora, okresu, wieku, nazwy itp.

Więc czym są kolekcje w Java? Podobnie jak w życiu rzeczywistym są to pewne zbiory. Zazwyczaj taki zbiór zawiera elementy tego samego typu. Najprostszą kolekcją którą już poznałeś jest tablica.

Tablice zawierają określoną ilość elementów tego samego typu. Do każdego elementu odwołujesz się za pomocą jego liczby porządkowej, możesz odczytać lub zapisać dowolny element. Niestety nie można w wydajny sposób zmienić rozmiaru tablicy w Java. Żeby powiększyć tablicę należy najpierw utworzyć tablicę większą, potem przepisać wszystkie elementy ze starej tablicy do nowej.

Na szczęście tablice nie są jedynymi dostępnymi kolekcjami w Java. Dziś zapoznamy się wstępnie z podstawowymi kolekcjami dostarczonymi razem z JVM. W kolejnych postach opiszę każdą z kolekcji dokładniej.

W Java wyróżniamy trzy podstawowe typy kolekcji:

  • listy
  • sety
  • mapy

Listy są bardzo podobne do tablic. Zawierają one (jak sama nazwa wskazuje) listę elementów tego samego typu. Każdy element posiada swoją własną liczbę porządkową (podobnie jak w tablicach), z jej użyciem można odczytać daną wartość lub zastąpić ją inną. To co odróżnia listy od tablic to zmienna wielkość. Do list można dodawać nowe elementy w nieskończoność (czytaj, do póki nie braknie Tobie pamięci RAM). Można też wybrane elementy usuwać. Usunięcie elementu nie powoduje powstania “dziury”, tylko przesuwa wszystkie pozostałe elementy o jedno miejsce.

Listę można porównać do książek na półce. Możesz dostawić kolejną książkę na końcu półki, lub włożyć ją pomiędzy inne książki. Każda książka ma swój numer porządkowy. Wyjęcie jednej (usunięcie) spowoduje zmianę “numeracji” pozostałych książek na półce.

Przejdźmy teraz do setów.

Sety można sobie wyobrazić jako worek do którego wkładamy kolejne elementy. Podobnie jak listy nie mają one ograniczonego rozmiaru. Jednak elementy nie posiadają liczy porządkowej. Tak jak w życiu codziennym, włożenie pewnej rzeczy do worka nie gwarantuje, że później ją bezproblemowo wyciągniemy, w setach również nie ma gwarancji kolejności elementów. Przeważnie w “workach” szukamy interesujących nas rzeczy, wyciągamy jedną rzecz sprawdzamy czy to jest ta szukana jak nie wkładamy ją z powrotem i wyciągamy kolejną. Tak samo jest z Set’ami, wkładanie nie stanowi większego problemu, natomiast wyciągnięcie wymaga “przeszukiwania”. Zapamiętaj, używaj Set’ów wtedy kiedy nie interesuje Ciebie kolejność.

Ostatnim popularnym typem kolekcji w Java są mapy. Służą one do przypisania konkretnej wartości do danego klucza. Kluczem oraz wartościami mogą być dowolne typy. Najczęściej spotykanym kluczem jest typ String (zazwyczaj jest to jakiś unikalny identyfikator). Do mapy zawsze wkładamy parę klucz -> wartość. Później możemy zamienić wartość dla danego klucza lub całkowicie usunąć wpis. Przykładem mapy może być lista kodów pocztowych, jeden kod pocztowy odpowiada danemu miastu lub rejonowi np:

Oprócz wymienionych wyżej typów kolekcji czasem spotyka się również:

  • stosy
  • wektory

Są one spotykane bardzo sporadycznie dlatego nie zostały dokładniej opisane.

Co to jest typ String w Java?

Do tej pory wszystkie zmienne jakie deklarowaliśmy były liczbami (zazwyczaj całkowitymi, typu int, lub rzeczywistymi (zmiennoprzecinkowymi), typu float). Nie będąc do końca tego świadomi praktycznie w każdym poprzednim programie używaliśmy typu String. Ale jako to? zapytasz.

Czym właściwie jest typ String? Otóż przechowuje on ciąg znaków, inaczej mówiąc tekst. Jak pewnie zaważyłeś, wszystkie teksty które wypisywane były na ekranie były umieszczone pomiędzy podwójnymi cudzysłowami(“”). Więc nie świadomi do końca istnienia tego typu wykorzystywaliśmy go w naszych programach. Każdy tekst który wypisaliśmy na ekranie był właśnie typu String.

Oczywiście deklaracja zmiennej typu String wygląda identycznie jak deklaracja dowolnej innej zmiennej:

możemy również taką zmienną wypisać na ekranie:

Ot tyle podstaw o typie String. Musisz zapamiętać dwie rzeczy:

  • typ ten przechowuje tekst,
  • dowolny ciąg znaków (tekst) pomiędzy podwójnymi cudzysłowami jest właśnie typu String.