"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:
|
Variabila strva conține șirul"[1, 2, 3]" |
|
Variabila strva conține șirul"[]" |
|
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:
|
Variabila strva conține șirul"[1, 2, 3]" |
|
Variabila strva conține șirul"[[1, 1], [2, 2], [3, 3]]" |
|
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:
|
false(referințele nu sunt egale) |
|
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:
|
Metoda equalscompară arrayspur ș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.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:
|
Metoda equalscompară arrays pur și simplu referințele a două matrice. false(referințele nu sunt egale) |
|
Metoda Arrays.equalsva compara și ca matrice unidimensionale care stochează referințe. Acestea conțin referințe diferite. (conținutul matricelor nu este egal) x1x2false |
|
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