Jason. Cała informatyka w jednym miejscu!

Tablica w języku Java będzie następnym tematem, który otwieram w chwili pisania tego artykułu. Tablica prędzej czy później przyda Ci się podczas pisania programu mającego operować na wielu danych 😎. Oprócz zastosowań, przedstawię również krótko czym jest struktura danych oraz dlaczego mówimy o tablicy, że jest ona statyczna.

JAK SIĘ PREZENTUJE TABLICA W JĘZYKU JAVA?

Tablica (ang. "array") jest pochodnym typem danych umożliwiającym przechowywanie wielu wartości w jednym miejscu. Więcej informacji zostawiłem w osobnym artykule. Przypomina kartonowe pudełko o ograniczonej pojemności, do którego możesz włożyć wiele tych samych przedmiotów. Warto zwrócić uwagę na słowa, które podkreśliłem nie bez przyczyny.

ROZMIAR PODAJESZ NA POCZĄTKU!

Za każdym razem kiedy tworzymy nową tablicę, musimy zawsze określić jej pojemność "z góry". Nie ma takiej możliwości, że na początek ustalimy że ma trzymać 5 elementów, a później zdecydujemy się na więcej. Nie! To jest istotna informacja, o której musisz mieć świadomość jeśli masz być poważnym programistą.

Oto pierwszy wniosek: tablica zawsze musi mieć ustalony rozmiar w momencie jej inicjalizacji. Dlatego jest określana statyczną strukturą danych ☝. Nie ma od tego wyjątków! Jeśli inne języki pozwalają na elastyczną zmianę rozmiaru, to nie są już stricte tablicami, tylko przeważnie mieszankami innych struktur danych.

TYLKO JEDEN TYP DANYCH

Drugim ograniczeniem jakie zawiera w sobie tablica w języku Java to dozwolone umieszczanie tylko jednego typu danych na tablicę. Innymi słowy nie ma miejsca na mieszanie liczb całkowitych z łańcuchami znaków! Jeśli decydujemy się na "int", to możemy włożyć do niej tylko liczby całkowite i kropka. Początkowo można uznać to za wadę, jednak gdyby głębiej się zastanowić, to można stwierdzić że podczas używania pętli "for" lub pętli "foreach" (ponieważ one pasują idealnie do tablic) będzie zdecydowanie łatwiej operować na danych jednego typu. Wyobraź sobie to sprawdzanie każdego elementu czy jest tego typu, czy innego. Masakra 😱! Więc ja takie ograniczenie uważam za dobrą rzecz, a jeśli bardzo jest potrzebny zestaw danych, to zawsze można skorzystać z typu własnej klasy.

MUSI BYĆ COŚ FAJNEGO

Możesz teraz sobie myśleć, że na cholerę Ci taka struktura danych mająca same wady 😁? Cóż...nie tylko wady. Tablica oferuje za to najszybszy dostęp do danych 😯. Używając notacji indeksowej (którą zaraz Ci pokażę) możesz dostać się do absolutnie każdego elementu w błyskawiczny sposób (z punktu widzenia procesora) ⚡.

Moja rada jest taka: jeśli jesteście absolutnie pewni, że rozmiar nie będzie modyfikowany podczas działania programu, to zawsze pochylajcie się w stronę tablicy - ona przyniesie Wam najefektywniejsze działanie 👍! W przeciwnym wypadku trzeba skorzystać z innych struktur danych, jak choćby kolekcja "ArrayList", która jest najczęściej poznawana przez początkujących jako pierwsza.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Podsumujmy ten zbiór wiedzy zaprezentowaniem jak wygląda tablica w języku Java w kodzie źródłowym. Wszystko - definicja, modyfikacja, odczyt.

DEFINICJA

Aby zdefiniować tablicę w języku Java, posługujemy się zasadami znanymi ze zmiennych, z niewielkim odstępstwem przy typie danych i przypisywaniu wartości:

int[] numbers = new int[4];

Pierwsza różnica to nawiasy kwadratowe obok nazwy typu, a druga to alokacja dla wielu komórek pamięci, zamiast wartości pojedynczej (które wstawiamy nieco inaczej). Korzystamy z połączenia słowa kluczowego "new" razem z podanym typem danych, a na samym końcu ponownie piszemy parę nawiasów kwadratowych podając wewnątrz nich liczbę elementów ile ma w sobie przechowywać tablica.

To jest jeden ze sposobów definicji tablicy. Drugi sposób to osadzenie już bezpośrednio konkretnych elementów podczas definiowania:

int[] numbers = new int[]{5, 4, -9, 81};

tylko wtedy już nie wstawiamy liczby wewnątrz nawiasów kwadratowych, a zamiast tego dorzucamy klamerki wewnątrz których osadzamy wartości, a rozmiar zostanie już wywnioskowany automatycznie. Pamiętaj - raz przypisanego rozmiaru już nie można zmienić!

MODYFIKACJA

Wartości w tablicach możemy później modyfikować po poprawnym zastosowaniu notacji indeksowej. Notacja indeksowa jest metodą odwoływania się do poszczególnych elementów. W języku Java, rozpoczyna ona swoje "odliczanie" od zera, czyli aby dostać się do pierwszego elementu tablicy, wstawiamy wartość ZERO:

numbers[0] = 15;	// indeks 0, element 1

Zapis troszkę bardziej znajomy, przynajmniej po prawej stronie. Zauważcie, że po raz kolejny korzystamy z nawiasów kwadratowych. One są nieodłącznym elementem każdej tablicy i stosujemy je przy każdej operacji.

ODCZYT

Odczyt wygląda bardzo podobnie - korzystamy ponownie z nawiasów i etykiety tablicy:

System.out.println(numbers[0]);

i możemy podstawić do wywołania funkcji, innej zmiennej czy gdziekolwiek chcemy. Tu kolejna ciekawostka: tablica w języku Java nie ochrania wartości przed edycją, nawet kiedy nałożymy na nią modyfikator "final" 😮! On zadziała na samą tablicę, ale nie na wartości (sprawi tylko tyle, że nie będziemy mogli zastąpić tę tablicą nową tablicą). Po więcej szczegółów zapraszam do załączonego wpisu 🙂.

WYJŚCIE POZA TABLICĘ

Ważne info. Możecie przez przypadek się zagalopować i próbować odwołać się do komórki, która nie istnieje w tablicy, bo na przykład odwołujecie się do piątego elementu, podczas gdy tablica zawiera tylko cztery sztuki:

numbers[4]	// indeks 4, element 5

Java zareaguje natychmiast na taką rzecz i zatrzyma wykonywanie tego procederu zgłaszając wyjątek "ArrayIndexOutOfBoundsException" (wyjątki to temat stojący jeszcze daleko od aktualnego artykułu, lecz jeśli Twoja ciekawość bierze górę, to zapraszam do odrębnego artykułu) 🥶! W jaki sposób możemy się przed tym obronić 🤔?

PĘTLE

Stanowczo odradzam operowania na pojedynczych składnikach tablicy, chyba że wymaga tego wyjątkowa sytuacja bądź tymczasowo do szybkich testów działania. Docelowo radzę korzystać tylko z pętli. Z jednego prostego powodu: używając wbudowanej stałej "length" macie pewność, że NIGDY nie wyjdziecie poza ramy tablicy 😄!

numbers.length;

To jest liczba całkowita reprezentująca liczbę elementów w tablicy. Jest ona niemodyfikowalna z powodu opisanego powyżej - raz ustalonego rozmiaru nie możemy już zmienić. Szybki rzut okiem na użycie dla pętli "for", która pasuje wręcz idealnie do tablic 👊:

for (int i = 0; i < numbers.length; i++) {
	System.out.println(numbers[i]);
}

Rozszerzona pętla "foreach" też nada się doskonale do tego zadania:

for (int number : numbers) {
	System.out.println(number);
}

Kiedy użyć jednej, a kiedy drugiej? Stosuj bracie pętlę "for", gdy potrzebujesz wartości zmiennej iteracyjnej nie tylko do odwołania się do i-tej komórki bądź nie chcesz wykonywać instrukcji dla wszystkich elementów np. wszystkie poza ostatnim. W innych wypadkach pętla "foreach" będzie bardziej zwięzła.

Tablica w języku Java

Tablica w języku Java jest pochodnym typem danych mogącym przechowywać wiele wartości jednego typu. Jest ona statyczną strukturą danych z powodu konieczności określenia rozmiaru już w momencie jej definiowania.


Czy wiesz, że tablica może przyjmować więcej niż jeden wymiar? Zostawmy to sobie na odrębny artykuł, żeby oddzielić podstawy od tematu troszkę trudniejszego 😊. Na chwilę obecną to wszystko z mojej strony co chciałem przekazać na temat tablic w języku Java, i tak dużo wyszło 🤗.

PODOBNE ARTYKUŁY