1. Arraysclasa

După cum am observat anterior, matricele sunt un instrument foarte util și frecvent utilizat în programare.

Creatorii Java au observat foarte repede că programatorii Java scriu adesea același cod atunci când lucrează cu matrice. De exemplu, copiați o parte dintr-o matrice într-o altă matrice, codați pentru a umple fiecare celulă a unei matrice cu aceeași valoare, afișați conținutul unei matrice într-un format convenabil etc.

De aceea au creat Arraysclasa specială (numele complet este java.util.Arrays), punând în ea cele mai populare acțiuni legate de matrice.

Are o mulțime de metode pentru fiecare ocazie, dar mai întâi vom lua în considerare doar 10 dintre ele - cele mai simple și mai des folosite.


2.Arrays.toString()

Prima metodă pe care o vom analiza se numește Arrays.toString(). Dar mai întâi, un mic fundal.

Fiecare matrice din Java are o toString()metodă, care returnează o „reprezentare textuală a matricei”. Puteți obține o reprezentare textuală a unui tablou folosind următoarea declarație:

String str = name.toString();

Unde nameeste numele variabilei matrice și streste numele variabilei care va stoca reprezentarea șir a matricei.

Dar dacă încercați să imprimați matricea pe ecran folosind metoda, cel mai probabil veți vedea ceva de genul acesta:System.out.println(name)

I@37afeb11

Prima literă Iînseamnă că este o intmatrice, iar simbolurile de după @sunt adresa matricei din memorie. Pe de o parte, aceasta este tocmai informațiile stocate în variabila matrice, dar pe de altă parte, ne așteptam la ceva diferit, nu?

Am vrut să vedem valorile din matrice! Și tocmai de aceea au venit cu Arrays.toString()metoda - de a afișa valorile unui tablou. O numim astfel:

String str = Arrays.toString(name);

Exemple:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
Variabila strva conține șirul:
"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
Variabila strva conține șirul:
"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
Variabila strva conține șirul:
"[Hi, How's, life?]"


3.Arrays.deepToString()

Dar dacă încercați să convertiți o matrice bidimensională într-o using the Arrays.toString()metodă șir (pentru a-l afișa), veți vedea ceva familiar:

[I@37afeb11, I@37afeb21, I@37afeb31]

Acest lucru se datorează faptului că celulele unei matrice bidimensionale stochează referințe la matrice unidimensionale. Și cum sunt matricele unidimensionale convertite într-un șir? Exact cum vezi mai sus.

Ce se poate face? Cum afișăm corect o matrice bidimensională?

În acest scop, Arraysclasa are o altă metodă specială — deepToString(). Apelarea arată astfel:

String str = Arrays.deepToString(name);

Această metodă poate fi transmisă matrice care sunt bidimensionale, unidimensionale, tridimensionale sau, în general, orice dimensiune și va afișa întotdeauna elementele matricei.
Notă: metoda Arrays.deepToString()nu funcționează cu matrice unidimensionale de primitive (de exemplu, int[]).

Exemple:

Integer[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
Variabila strva conține șirul:
"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
Variabila strva conține șirul:
"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
Variabila strva conține șirul:
"[[[1, 2, 3], [1]], [[]]]"


4.Arrays.equals()

Ne-am dat seama cum să afișam matrice pe ecran, dar cum rămâne cu compararea matricelor?

Pentru a compara șiruri, avem equalsși equalsIgnoreCasemetode, dar ce metode au tablourile?

Vestea bună este că tablourile au o equalsmetodă. Vestea proastă este că nu compară conținutul matricelor. Metoda equalsmatricelor face același lucru ca și ==operatorul - compară referințele. Exemple:

Exemple:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = x1 == x2;


false(referințele nu sunt egale)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Metoda equalscompară arrayspur și simplu referințele a două matrice.

false(referințele nu sunt egale)

Ce se poate face? Cum comparăm matricele în funcție de conținutul lor?

Și din nou Arraysvine în ajutorul nostru, sau mai precis, Arrays.equals()metoda sa. Așa îi spunem noi:

Arrays.equals(name1, name2)

Metoda returnează truedacă tablourile sunt de lungime egală și elementele lor sunt egale. În caz contrar, se întoarce false.

Exemple:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Metoda equalscompară arrays pur și simplu referințele a două matrice.

false(referințele nu sunt egale)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(conținutul este egal)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(conținutul matricelor este diferit)

5.Arrays.deepEquals()

Și, așa cum probabil ați ghicit deja, Arrays.equalsmetoda nu va funcționa corect pentru matrice bidimensionale: tratează matrice bidimensionale ca pe o matrice unidimensională ale cărei elemente sunt adrese ale matricelor unidimensionale.

Astfel, pentru a compara corect tablourile multidimensionale ( n = 1, 2, 3,...), au venit cu Arrays.deepEquals()metoda. Apelarea arată astfel:

Arrays.deepEquals(name1, name2)

Metoda revinetruedacă tablourile sunt de lungime egală și elementele lor sunt egale. În caz contrar, se întoarcefalse. Dacă elementele din interiorul matricei sunt și matrice, atunci Arrays.deepEquals()metoda este folosită pentru a le compara și așa mai departe.

Exemple:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
x1.equals(x2);
Metoda equalscompară arrays pur și simplu referințele a două matrice.

false(referințele nu sunt egale)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.equals(x1, x2);
Metoda Arrays.equalsva compara și ca matrice unidimensionale care stochează referințe. Acestea conțin referințe diferite. (conținutul matricelor nu este egal) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.deepEquals(x1, x2);


true(conținutul este egal)