"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 Arrays
clasa 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 name
este numele variabilei matrice și str
este 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 int
matrice, 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:
|
Variabila str va conține șirul"[1, 2, 3]" |
|
Variabila str va conține șirul"[]" |
|
Variabila str va 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 Arrays
are 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:
|
Variabila str va conține șirul"[1, 2, 3]" |
|
Variabila str va conține șirul"[[1, 1], [2, 2], [3, 3]]" |
|
Variabila str va 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 equals
metoda!
„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 equals
metoda și pentru matrice. Vești proaste: nu compară conținutul matricelor. Metoda equals
matricelor face același lucru ca și ==
operatorul - compară referințele.
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) |
"Deci, ce facem? Cum comparăm matricele în funcție de conținutul lor?"
„Din nou Arrays
clasa vine în ajutorul nostru. Mai precis, Arrays.equals()
metoda ei. Așa o numim:
Arrays.equals(name1, name2)
„Metoda returnează true
dacă tablourile sunt de lungime egală și elementele lor sunt egale. În caz contrar, returnează 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) |
Arrays.deepEquals()
„Și, după 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 matricele multidimensionale ( n = 1, 2, 3,...
), au venit cu Arrays.deepEquals()
metoda. Apelarea arată astfel:
Arrays.deepEquals(name1, name2)
„Metoda returnează true
dacă 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:
|
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) |
„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.”
GO TO FULL VERSION