Tablice

Tablice w języku Java są obiektami przechowującymi sekwencję zmiennych pewnego ustalonego typu. Deklarując zmienną tablicową podajemy typ zmiennych, które będzie ona przechowywała, oraz wymiar tablicy – wymiar, nie rozmiar! Tablice w języku Java mogą być wielowymiarowe, przy czym ta wielość nie jest ograniczona. Możemy mieć tablice dwu, trzy, cztero, pięcio… i więcej wymiarowe.

Deklarując zmienną typu tablicowego nie podajemy rozmiaru tablicy, bo jest zbędny. Jest on natomiast wymagany, gdy tworzymy właściwy obiekt tablicy; musi być bowiem wiadomym, jak duży obszar pamięci trzeba zaalokować. Poniżej przykład pokazujący deklarację zmiennych typu tablicowego i przypisanie tym zmiennym nowo utworzonych obiektów tablic:

File[] files = new File[4];
  
int[] nums = new int[16];

W pierwszej linii deklarujemy zmienną o nazwie files dla tablicy jednowymiarowej elementów typu File i przypisujemy jej nowy obiekt tablicy czteroelementowej. W drugiej linii analogicznie, tyle że chodzi o tablicę szesnastoelementową elementów typu int.

Kolejne wymiary do tablic dokładamy dodając kolejne nawiasy kwadratowe. Przykładowo, aby zadeklarować zmienną tablicową dla tablicy dwuwymiarowej elementów typu File i przypisać do tej zmiennej nowo utworzony obiekt takiej tablicy, z czego w pierwszym wymiarze tablicy mamy 4 elementy a w drugim 8, napiszemy:

File[][] filesMatrix = new File[4][8];

Do konkretnego elementu tablicy odwołujemy się także za pomocą notacji nawiasów kwadratowych. Przykładowo, aby przypisać wartość elementowi w wierszu drugim i kolumnie drugiej naszej tablicy filesMatrix napiszemy:

filesMatrix[1][1] = new File("C:/myFilePath/myFile.txt");

Powyższy fragment kodu jest poprawny. Tablice w Javie są indeksowane począwszy od zera, tak więc aby odwołać się do drugiego wiersza i drugiej kolumny należy użyć dla obydwu wymiarów indeksu 1.

Elementy nowo utworzonej tablicy inicjalizowane są wartościami domyślnymi. Jeśli więc tworzymy tablicę elementów typów numerycznych, np. int, to wszystkie elementy tej tablicy będą miały inicjalnie wartość 0. Możemy teraz każdej z komórek tablicy przypisać pożądaną wartość w sposób pokazany na powyższym przykładzie, ale możemy też użyć w tym celu dostępnej w Javie skróconej składni inicjalizacji tablic. Przykładowo, aby utworzyć tablicę czteroelementową elementów typu int, taką że kolejne elementy tej tablicy mają wartości odpowiednio 1, 2, 3 i 4 możemy napisać:

int[] preinitializedMatrix = new int[] { 1, 2, 3, 4 };

Jak widać powyżej wartości które mają być przypisane do kolejnych elementów tablicy wymieniamy ujęte w nawiasy klamrowe tuż po standardowej instrukcji instancjonowania obiektu tablicy. Co ważne, nie podajemy w takim wypadku rozmiaru tablicy – rozmiar jest wyliczany automatycznie na podstawie ilości wymienionych wartości.

Analogiczna składnia może być użyta także dla utworzenia preinicjalizowanej wartościami tablicy wielowymiarowej. Przykładowo, tablicę dwuwymiarową możemy utworzyć i jednocześnie zainicjalizować w sposób następujący:

int[][] twoDimMatrix = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };

Zmienne tablicowe to zwykłe zmienne obiektowe, tak więc możemy im przypisywać dowolne obiekty odpowiedniego typu w dowolnym momencie, nie koniecznie w chwili deklaracji. W przykładzie pokazanym poniżej deklarujemy zmienną nums nie przypisując jej początkowo żadnej tablicy. Dopiero potem przypisujemy do niej tablicę dwuelementową. W kolejnej linii przypisujemy jej kolejną tablicę, tym razem czteroelementową:

int[] nums;
  
nums = new int[] { 1, 2 };
nums = new int[] { 1, 2, 3, 4 };

W pewnych przypadkach możemy skorzystać ze skróconej formy tego zapisu. A mianowicie przy inicjalizacji deklarowanej właśnie zmiennej tablicowej możemy opuścić operator new oraz typ tablicy. Typ tablicy jest znany bo jest to typ deklarowanej zmiennej. Wymiar i rozmiar poszczególnych wymiarów jest obliczany na podstawie liczby i układu wartości wymienionych w nawiasach klamrowych. Możemy więc zapisać:

int[] myMatrix = { 1, 2, 3, 4};

albo:

File[] files = { new File("C:/fileA.txt"), new File("C:/fileB.txt") };
Subscribe
Powiadom o
guest
2 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments