"Amigo, sper că până acum ai realizat cât de utile sunt matricele în programare?"

"Cel mai sigur, Rishi! Am rezolvat deja mai mult de o sarcină."

"Sarcinile tale au avut acțiuni repetitive? Genul pe care le-ai făcut iar și iar."

„Dacă v-am înțeles corect, vă referiți la acțiuni similare în sarcini diferite? De exemplu, folosind o buclă peste tot pentru a afișa conținutul unei matrice — m-am săturat să fac asta!”

„Da, asta vreau să spun. Creatorii Java au observat că programatorii Java scriu adesea același cod atunci când lucrează cu matrice. De exemplu, cod pentru a copia o parte dintr-o matrice într-o altă matrice sau cod pentru a umple fiecare celulă a unei matrice cu același cod. Sau exemplul dvs.: cod pentru a afișa conținutul unei matrice într-o formă care poate fi citită pe ecran.

„Și programatorii adevărați au o regulă foarte importantă: nu te repeta. Vei fi de acord că este greșit să faci o muncă de prisos — nu vei fi plătit pentru asta. Munca eficientă este bine plătită, crede-mă. De altfel, un începător codul este imediat recunoscut după cantitatea mare de cod repetitiv.

„Creatorii Java s-au gândit la asta și au creat Arraysclasa specială (numele complet este java.util.Arrays), punând în ea cele mai populare acțiuni legate de matrice.”

„Hmm... Foarte interesant. Deci ce are exact?

„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.

Arrays.toString()

„Prima metodă la care ne vom uita este Arrays.toString(). Dar mai întâi, un mic context.

„Fiecare matrice din Java are o toString()metodă, care returnează o „reprezentare textuală a matricei”. Puteți obține o reprezentare textuală a unei matrice 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. Amigo, ai încercat să tipăriți o matrice pe ecran folosind metoda ?System.out.println(name)

Mărturisesc, asta s-a întâmplat. Am văzut niște farfurii. Am decis să nu rămîn în cale și să continui să folosesc bucle.

„Cel mai probabil ai văzut ceva de genul:

I@37afeb11

„Prima literă Iînseamnă că este o intmatrice, iar simbolurile de după @sunt adresa unui singur obiect din memorie. Vă puteți gândi la aceasta ca fiind adresa matricei din memorie. Pe de o parte, aceasta este tocmai informațiile stocate în variabilă matrice, dar pe de altă parte, te așteptai la ceva diferit, nu-i așa?"

"Exact! Plănuiam să văd valorile din matrice. Acesta a fost ultimul lucru la care mă așteptam."

„Și tocmai de aceea au venit cu metoda Arrays.toString()— 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?]"

Arrays.deepToString()

„Cu toate acestea, toString()metoda nu este adecvată când vine vorba de matrice bidimensionale. Cu alte cuvinte, dacă încercați să apelați Arrays.toString(), veți vedea ceva familiar:

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

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

"Ce să facem atunci? Cum afișăm corect o matrice bidimensională?"

„Creatorii Java au anticipat și acest lucru. În acest scop, clasa Arraysare o altă metodă specială — deepToString(). Apelarea arată astfel:

String str = Arrays.deepToString(name);

„Această metodă poate fi transmisă matrici care sunt bidimensionale, unidimensionale, tridimensionale sau, în general, orice dimensiune și va afișa întotdeauna elementele matricei.

Exemple:

int[] 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]], [[]]]"

Arrays.equals()

"Ne-am dat seama cum să afișăm matrice pe ecran. Cum rămâne cu compararea matricelor? Vă amintiți ce metode putem folosi pentru a compara șirurile de caractere?"

„De obicei folosesc equalsmetoda!

„Da, equalsși, de asemenea, equalsIgnoreCase(care compară șirurile de caractere fără a ține cont de litere mari și mici).

„Vești bune: puteți folosi equalsmetoda și pentru matrice. Vești proaste: nu compară conținutul matricelor. Metoda equalsmatricelor face același lucru ca și ==operatorul - compară referințele.

Exemple:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
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)

"Deci, ce facem? Cum comparăm matricele în funcție de conținutul lor?"

„Din nou Arraysclasa vine în ajutorul nostru. Mai precis, Arrays.equals()metoda ei. Așa o numim:

Arrays.equals(name1, name2)

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

Exemple:

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)
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)

Arrays.deepEquals()

„Și, după 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 matricele multidimensionale ( n = 1, 2, 3,... ), au venit cu Arrays.deepEquals()metoda. Apelarea arată astfel:

Arrays.deepEquals(name1, name2)

„Metoda returnează truedacă tablourile sunt de lungime egală și elementele lor sunt egale. În caz contrar, returneazăfalse. 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)

„Mulțumesc, Rishi! Această lecție este exact ceea ce aveam nevoie pentru a-mi face viața mai ușoară și mai fericită în viitor. Acum voi folosi metodele clasei Arrays și voi scrie programele și mai repede.

„Pe asta mă bazam, ha-ha. Dar acestea nu sunt toate metodele interesante din clasa Arrays. Îți voi spune despre altele data viitoare.”