1. Stringmatrice

Aș dori să vă ofer o scurtă prezentare generală despre Stringmatrice.

După cum am spus anterior, o matrice poate fi de orice tip. Aceasta înseamnă că puteți crea o matrice de Strings. Dacă am vrea să scriem un program care „citește 10 linii de la tastatură și le afișează în ordine inversă”, iată cum ar arăta codul:

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Creați un Scannerobiect
Creați un obiect matrice de 10 elemente
Buclă de la 0 la 9

Citiți un șir de caractere de la tastatură și salvați-l în următoarea celulă a matricei
Buclă de la 9 la 0

Afișați următoarea celulă din matrice

Codul abia s-a schimbat! A trebuit să înlocuim doar intcu Stringatunci când am creat matricea. Ei bine, și când citim șirul de pe tastatură, am înlocuit și nextInt()metoda cu nextLine().


2. Stringmatrice în memorie

Și încă un fapt util. Să luăm în considerare 3 imagini:

Imaginea 1. Cum Stringeste aranjat un obiect în memorie:

Matrice de șiruri în memorie

Această poză a fost luată din lecțiile anterioare.

Vă rugăm să rețineți că textul șirului de caractere nu este stocat direct în variabilă: pentru acesta este alocat un bloc separat de memorie. O Stringvariabilă stochează adresa (referința) unui obiect care stochează textul.

Imaginea 2. Cum este aranjată o matrice întregă în memorie:

Matrice de șiruri în memorie 2

Această imagine este, de asemenea, familiară.

Imaginea 3. Cum este aranjată o matrice de șiruri în memorie:

Cum este aranjată o matrice String în memorie

În stânga vedem o variabilă matrice al cărei tip este String[](stochează adresa unui obiect matrice).

În mijloc, avem Stringobiectul matrice în sine.

Și în dreapta sunt obiecte șir care stochează ceva text.

Celulele matricei Stringnu stochează șirurile în sine (textul obiectelor String). În schimb, își stochează adresele (referințele la acestea). În același mod în care Stringvariabilele stochează adresele obiectelor șir (unde este stocat textul).

Luați în considerare acest lucru atunci când comparați celulele matrice:

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
Creați o matrice de 10 șiruri

Pune valori în matrice



true (referențele sunt egale)
false (referențele nu sunt egale)
true (șirurile sunt egale)
true(șirurile sunt încă egale)


3. Inițializare rapidă a matricei în Java

Matricele sunt super utile, așa că creatorii Java au încercat să facă lucrul cu ele cât mai convenabil posibil.

Primul lucru pe care l-au făcut a fost să simplifice inițializarea matricei, procesul prin care furnizați valorile inițiale ale unei matrice.

La urma urmei, pe lângă datele citite de undeva, un program are și destul de des nevoie de propriile sale date interne pentru a funcționa. De exemplu, să presupunem că trebuie să stocăm lungimile fiecărei luni într-o matrice. Iată cum ar putea arăta codul:

int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December

Dar datorită creatorilor Java, există o modalitate de a scrie acest lucru mai concis:

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Pur și simplu puteți enumera toate valorile matricei, separate prin virgule!

Convenabil, nu? Dar asta nu este tot.

După cum se întâmplă, compilatorul poate determina tipul de container (obiect matrice) în funcție de tipul valorilor matricei. Și pentru a determina lungimea matricei, este trivial să numărăm numărul de elemente scrise în acolade.

Asta înseamnă că acest cod poate fi scris și mai scurt:

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Un lucru frumos, nu-i așa? 🙂

Aceasta se numește „inițializare rapidă a matricei”. Apropo, acest lucru funcționează pentru alte tipuri decât int...

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};