Elementarz Java #4 – Tablice

Wstęp

Dzisiaj na tapecie temat dość prosty i krótki. Tak nawiasem pisząc to najkrótszy artykuł z serii #ElementarzJava ale jak pewnie się domyślasz, patrząc na spis treści – to cisza przed burzą.

Samo stosowanie i używanie tablic nie jest skomplikowane, powiedział bym, że jest wręcz trywialne. To chyba jedna z najpopularniejszych kolekcji do przechowywania danych, którą poznajemy na dość wczesnym etapie nauki programowania. Diabeł jednak tkwi w szczegółach i jak to zwykle bywa są pewnie elementy, które nie są takie oczywiste na jakie wyglądają. Takimi zagadnieniami zająłem się właśnie w niniejszym artykule, zapraszam więc do jego lektury i mam nadzieję, że poszerzy on Twoje horyzonty!  

Seria #ElementarzJava składa się z następujących artykułów:

  1. Podstawy języka Java (kompilacja, zmienne, struktura klasy, pakiety),
  2. Typy danych w języku Java (deklaracja i inicjalizacja zmiennych, różnica między typami, garbage collection, typy opakowujące)
  3. Operatory i konstrukcje warunkowe w Java (użycie operatorów, porównywanie obiektów, instrukcje: if, if/else, switch),
  4. Tablice (charakterystyka tablic, tablice jedno i wielowymiarowe),
  5. Pętle (tworzenie pętli, instrukcje break i continue, etykiety),
  6. Metody oraz hermetyzacja (metody statyczne, przeciążanie metod, konstruktory, modyfikatory widoczności, hermetyzacja elementów klasy, parametry) – 21.07,
  7. Dziedziczenie (implementacja, przysłanianie metod, polimorfizm, rzutowanie) – 4.08,
  8. Obsługa wyjątków (kategorie wyjątków, łapanie wyjątków, klasy wyjątków) – 18.08,
  9. API Java (String, StringBuilder, data i czas, kolekcje, wyrażenia lambda) – 1.09.

Przy wpisach, które nie zostały jeszcze opublikowane, umieszczone są daty ich planowanej premiery.

Jesteś tu pierwszy raz? Polecam rozpocząć lekturę od materiału: Elementarz Java #0 – zapowiedź.

Czym się charakteryzują tablice?

Zacznijmy od tego, że tablica to obiekt, który przechowuje kolekcję wartości. Może ona mieć typ zarówno prosty (np. int) jak i obiektowy (np. Integer). Java jak każdy nowoczesny język programowania umożliwia tworzenie wielowymiarowych tablic. Tablica jednowymiarowa to obiekt, który odnosi się do zbioru wartości skalarnych. Tablice wielowymiarowe odnoszą się do zbioru obiektów, gdzie każdy z nich jest tablicą jednowymiarową. Tworzenie tablicy jest podzielone na trzy kroki: deklaracja, alokacja i inicjalizacja. Deklaracja tablicy składa się z podania jej typu, nazwy zmiennej i jednego lub więcej wystąpień nawiasów kwadratowych ( [ ] ). Tablice mogą posiadać typ interfejsu lub klasy abstrakcyjnej. Oczywiście możemy również stworzyć tablicę typu java.lang.Object (ponieważ wszystkie klasy w Java rozszerzają klasę Object). 

Wszystkie tablice umożliwiają nam dostęp do pola length, które określa liczbę elementów w tablicy. 

Klasa Arrays poza metodą equals, którą opisywałem przy okazji porównywania tablic zawiera również metodę asList, która to konwertuje tablicę do listy. Kolekcja list z kolei ma zaimplementowaną metodę toArray, która to konwertuje listę do tablicy.

Tablica jednowymiarowa

Deklaracja, alokacja i inicjalizacja

Istnieje kilka sposób tworzenia tablic w języku Java. Przenalizujmy poniższe przykłady.

Jedna z najpopularniejszych i najczęściej spotkanych metod tworzenia, alokacji i inicjalizacji pustej tablicy wygląda następująco.

Powyższy zapis oznacza, że deklarujemy i jednocześnie alokujemy jednowymiarową pustą tablicę typu String. Sama deklaracja tablicy wygląda tak.

Natomiast jeśli później będziemy chcieli ją alokować oraz jednocześnie inicjalizować no to możemy to zrobić choćby za pomocą słówka kluczowego new (tablica jest obiektem).

Tablicę w momencie alokacji możemy również zainicjalizować. Popatrzmy jak to się robi.

Można to oczywiście zrobić nieco krócej.

Należy jednak pamiętać, że inicjalizacja tablicy poprzez nawiasy klamrowe, dopuszczalna jest jedynie w momencie jej alokacji. Jeśli tablica w momencie alokacji jest równocześnie inicjalizowana to nie podajemy jej rozmiaru.

Powyższe dwa przykłady nie zostaną skompilowane poprawnie.

Jakie są dopuszczalne formy tworzenia tablic jednowymiarowych? 

Poza przypadkami, które opisałem wyżej, podczas deklaracji oraz alokacji tablicy, specyfikacja Javy dopuszcza następujące formy.

W skrócie zasada jest taka, że nawiasy kwadratowe mogą występować po nazwie zmiennej lub jej typie. 

Tablica wielowymiarowa

Deklaracja, alokacja i inicjalizacja

Tablice wielowymiarowe tworzy się praktycznie tak samo jak te jednowymiarowe. Jedna ważna uwaga to taka, że podczas alokacji tablicy (jeśli jej równocześnie nie inicjalizujemy) to musimy podać rozmiar przynajmniej pierwszego poziomu tablicy (dla kolejnych wymiarów może to zostać pominięte).

Poniższy kod nie zostanie skompilowany poprawnie, ze względu na brak wymiaru pierwszego poziomu tablicy.

Przykład alokacji i inicjalizacji tablicy wielowymiarowej.

Oczywiście tablice wielowymiarowe mogą być asymetryczne. Dopuszczalna jest różna liczba kolumn w poszczególnych wierszach.

W przypadku tablic wielowymiarowych nawiasy klamrowe mogą występować zarówno po nazwie zmiennej jak i jej typie – identycznie jak w przypadku tablic jednowymiarowych. Wyjątek jest tu taki, że warunek ten może zachodzić równocześnie. Dopuszczalne są takie zapisy.

Podsumowanie

Miało być krótko więc jest. To na tyle jeśli chodzi o temat tablic w języku Java. Jeśli masz jakieś pytania, wątpliwości, uwagi to sekcja komentarzy jest do Twojej dyspozycji. Tymczasem już teraz zapraszam na kolejny materiał tym razem na temat pętli, który pojawi się tradycyjnie równo za dwa tygodnie. 

Przeczytaj również

, , , , , , , , , , , ,