1. Tablice w pamięci

Zdjęcia w poprzednich przykładach są nieco niedokładne.

Podczas tworzenia tablic (a także podczas tworzenia łańcuchów znaków) w pamięci przydzielane są dwa bloki pamięci: jeden do przechowywania samej tablicy (kontenera), a drugi dla zmiennej przechowującej jej adres . Zaktualizowana sytuacja jest pokazana na poniższym obrazku:

Tablice w pamięci

Kolor zielony pokazuje tablicę 10elementów typu inti zmienną typu int[], która przechowuje adres (referencję) tablicy typów intw pamięci.

intDla porównania zmienna typu normalnego przechowująca wartość jest zaznaczona na niebiesko 199.

To trochę jak przechowywanie ciągów znaków w pamięci, nie sądzisz?

Właśnie tak, linie. I podobnie jak w przypadku łańcuchów, „zmienne tablicowe” można sobie przypisywać:

Kod Wyjaśnienie
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Tworzymy tablicę 10elementów typu int. Wpisz wartość
do komórki z indeksem . Wpisz wartość do komórki z indeksem . Zapisujemy adres, który jest w zmiennej do zmiennej . Teraz oba wskazują na ten sam obiekt tablicy w pamięci. W komórce z indeksem obiektu array wpisujemy sumę wartości, które są przechowywane w komórkach (stored ) i (stored ). 24
79
ba
ab
92479

W takim przypadku obiekt tablica pozostanie tam, gdzie był, a zmienne ai bbędą przechowywać te same adresy (referencje) do tego samego obiektu. Widzieć zdjęcie:

Tablice w pamięci 2

2. Bardziej szczegółowa praca z tablicą

Tablicę można utworzyć z absolutnie dowolnego typu. Aby to zrobić, wystarczy napisać nawiasy kwadratowe po nazwie typu. Ogólna forma tworzenia tablicy będzie następująca:

тип[] Nazwa = new тип[ilość];

Gdzie typ to typ elementów tablicy (komórek), które będziemy przechowywać w tablicy. Nazwa to nazwa zmiennej, za pomocą której uzyskamy dostęp do tablicy, a ilość to liczba komórek w tablicy.

Powyższy przykład pokazuje postać kanoniczną: tworzenie zmiennej tablicowej i tworzenie obiektu tablicowego. W rzeczywistości są to dwie niezależne struktury.

Zmienną tablicową i obiekt tablicowy można utworzyć oddzielnie:

тип[] Nazwa;
Nazwa = new тип[ilość];

I jeszcze jeden ważny punkt:

Zmienne, a nawet wyrażenia całkowitoliczbowe mogą działać jako indeks tablicy i jako liczba elementów tablicy .

Przykłady:

Kod Wyjaśnienie
int n = 100;
int[] a = new int[n];
Tworzenie tablicy z nelementów
int n = 100;
int[] a = new int[n * 2 + 3];
Tworzenie tablicy dla każdego 203elementu
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Ważny:
Nawiasem mówiąc, pamiętaj, że jeśli spróbujesz uzyskać dostęp do komórki tablicy za pomocą indeksu, którego nie ma w tablicy (w naszym przypadku są to wszystkie liczby całkowite oprócz liczb ), program zawiesi się z błędem - indeks 0..99jest ArrayIndexOfBoundExceptionpoza tablica.

3. Długość tablicy

Jak widzieliśmy w poprzednim przykładzie, można oddzielnie utworzyć zmienną tablicową, a następnie przypisać jej wartość (odwołanie do obiektu tablicowego) gdzieś w kodzie. Możesz nawet to zrobić:

Kod Wyjaśnienie
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Utwórz zmienną tablicową typu int[]
Jeśli zmienna jest amniejsza niż 10,
utwórz tablicę 10elementów.
W przeciwnym razie
utwórz tablicę 20elementów

I jak dalej pracować z taką tablicą? Jak mogę dowiedzieć się, ile ma elementów?

Aby to zrobić, tablica ma specjalną właściwość (zmienną) - length. Długość tablicy można znaleźć za pomocą następującego wyrażenia:

array.length;

Gdzie arrayjest nazwą zmiennej tablicowej i lengthjest nazwą właściwości obiektu tablicowego. Wartość właściwości lengthnie może zostać zmieniona: samą właściwość lengthmożna przypisać innym zmiennym, ale nic nie można do niej przypisać (program po prostu się nie skompiluje).

Oto jak kontynuować poprzedni przykład:

Kod Wyjaśnienie
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Utwórz zmienną tablicową typu int[]
Jeśli zmienna jest amniejsza niż 10,
utwórz tablicę 10elementów.
W przeciwnym razie
utwórz tablicę 20elementów
Przejrzyj wszystkie elementy tablicy: od 0i do długościarray.length — 1

4. Podsumowanie faktów dotyczących tablic Java

Podsumujmy znane fakty dotyczące tablic:

Fakt 1. Tablica składa się z wielu komórek.

Fakt 2. Dostęp do określonej komórki odbywa się poprzez wskazanie jej numeru.

Fakt 3. Wszystkie komórki są tego samego typu.

Fakt 4. Wartość początkowa dla wszystkich komórek to 0 i null(jeśli adres jest przechowywany w komórce) false(dla typu boolean). Więcej o wartościach domyślnych dowiesz się w tym rozdziale .

Fakt 5. String[] list to tylko deklaracja zmiennej: sam kontener (obiekt tablicy) nie został jeszcze utworzony. Aby móc z nim pracować, należy utworzyć tablicę (kontener) i umieścić go w tej zmiennej, a następnie użyć. Zobacz przykład poniżej.

Fakt 6. Kiedy tworzymy obiekt tablicowy (kontener), musimy określić, jak długi jest - ile zawiera komórek. Odbywa się to za pomocą polecenia takiego jak: new TypeName[n];

Fakt 7. Długość tablicy można znaleźć za pomocą właściwości .length.

Fakt 8. Po utworzeniu tablicy nie można zmienić ani rodzaju jej elementów, ani ich liczby.

Kod Wyjaśnienie
String s;
String[] list;
srówna się null
listrównanull
list = new String[10];
int n = list.length;
Zmienna listprzechowuje referencję do obiektu - tablicę ciągów 10elementów.
nrówna się10
list = new String[0];

Teraz listzawiera tablicę 0elementów. Istnieje tablica, ale nie może ona przechowywać elementów.

list = null;
System.out.println(list[1]);
Zostanie wygenerowany wyjątek (błąd programu) - program ulegnie awarii. listzawiera pusty link -null
list = new String[10];
System.out.println(list[10]);
Zostanie wygenerowany wyjątek (błąd programu) - tablica poza zakresem.
Jeśli listzawiera 10elementy/komórki, to ich dozwolonymi indeksami są: 0 1 2 3 4 5 6 7 8 9- suma 10sztuk.