1. Arrays
clasa
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 Arrays
clasa 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 name
este numele variabilei matrice și str
este 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 int
matrice, 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:
|
Variabila str va conține șirul:
|
|
Variabila str va conține șirul:
|
|
Variabila str va conține șirul:
|
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, Arrays
clasa 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:
|
Variabila str va conține șirul:
|
|
Variabila str va conține șirul:
|
|
Variabila str va conține șirul:
|
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 equalsIgnoreCase
metode, dar ce metode au tablourile?
Vestea bună este că tablourile au o equals
metodă. Vestea proastă este că nu compară conținutul matricelor. Metoda equals
matricelor face același lucru ca și ==
operatorul - compară referințele. Exemple:
Exemple:
|
false (referințele nu sunt egale) |
|
Metoda equals compară arrays pur ș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 Arrays
vine în ajutorul nostru, sau mai precis, Arrays.equals()
metoda sa. Așa îi spunem noi:
Arrays.equals(name1, name2)
Metoda returnează true
dacă tablourile sunt de lungime egală și elementele lor sunt egale. În caz contrar, se întoarce false
.
Exemple:
|
Metoda equals compară arrays pur și simplu referințele a două matrice. false (referințele nu sunt egale) |
|
true (conținutul este egal) |
|
false (conținutul matricelor este diferit) |
5.Arrays.deepEquals()
Și, așa cum probabil ați ghicit deja, Arrays.equals
metoda 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 revinetrue
dacă 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:
|
Metoda equals compară arrays pur și simplu referințele a două matrice. false (referințele nu sunt egale) |
|
Metoda Arrays.equals va compara și ca matrice unidimensionale care stochează referințe. Acestea conțin referințe diferite. (conținutul matricelor nu este egal) x1 x2 false |
|
true (conținutul este egal) |