Arrays în cursul CodeGym Pe CodeGym, începeți să lucrați cu matrice la nivelul 7 al misiunii Java Syntax. Le sunt dedicate trei lecții , precum și 8 sarcini pe diferite niveluri pentru a vă consolida abilitățile de lucru cu matrice. Dar veți întâlni matrice de multe ori în timpul cursului (în special, clasa Array va fi studiată în misiunea Java Collections și ca parte a muncii dvs. viitoare. |
Ce este o matrice?
O matrice este o structură de date care stochează elemente de același tip. Vă puteți gândi la el ca la un set de celule numerotate. Puteți pune câteva date în fiecare celulă (un element de date pe celulă). O anumită celulă este accesată folosind numărul ei. Numărul unui element din matrice se mai numește și index . În Java, o matrice este omogenă, adică toate celulele sale conțin elemente de același tip. Astfel, o matrice de numere întregi conține numai numere întregi ( int ), o matrice de șiruri de caractere — numai șiruri de caractere și o matrice de instanțe ale clasei Dog pe care am creat-o va conține doar obiecte Dog . Cu alte cuvinte, Java nu ne va lăsa să punem un număr întreg în prima celulă a matricei, un șir în a doua și un câine în a treia.
Declararea unui tablou
Cum declari o matrice?
Ca orice variabilă, o matrice trebuie să fie declarată în Java. Acest lucru se poate face într-unul din două moduri. Sunt echivalente, dar prima modalitate este mai în concordanță cu stilul Java. Al doilea este o moștenire a limbajului C: mulți programatori C au trecut la Java și a fost păstrată o metodă alternativă pentru confortul lor. Tabelul arată ambele moduri de declarare a unui tablou în Java:Nu. | Declararea unui tablou, sintaxă Java | Exemple | cometariu |
---|---|---|---|
1. |
dataType[] arrayName; |
|
Este recomandabil să declarați o matrice în acest fel. Acesta este stilul Java. |
2. |
dataType arrayName[]; |
|
Metoda de declarare a matricei moștenit de la C/C++, funcționează în Java |
Crearea unei matrice
Cum creezi o matrice?
Ca orice alt obiect, poți crea un array Java, adică să-i rezervi un loc în memorie, folosind operatorul new . Asa se face:
new typeOfArray[length];
unde typeOfArray este tipul matricei și lungimea este lungimea acesteia (adică numărul de celule) exprimată ca număr întreg ( int
). Dar rețineți că aici am alocat doar memorie pentru matrice - nu am asociat matricea declarată cu nicio variabilă declarată anterior. De obicei, o matrice este mai întâi declarată și apoi instanțiată, de exemplu:
int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
Aici am creat o matrice de numere întregi numită myArray , informând compilatorul că este format din 10 celule (fiecare dintre acestea va conține un număr întreg). Cu toate acestea, este mult mai obișnuit să folosiți următoarea sintaxă abreviată pentru a crea o matrice imediat când este declarată:
int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
Vă rugăm să rețineți:După ce o matrice este creată folosind operatorul nou , celulele sale conțin valori implicite. Pentru tipurile numerice (ca în exemplul nostru), valoarea implicită este 0, pentru tipul boolean , este false , iar pentru tipurile de referință, este null . Astfel, după executarea acestei instrucțiuni
int[] myArray = new int[10];
obținem o matrice de zece numere întregi și, până când programul face ceva pentru a schimba valorile, fiecare celulă conține 0.
Puteți găsi mai multe informații despre matrice în articolul „ Ceva despre matrice ” |
Lungimea matricei în Java
După cum am spus mai sus, lungimea unei matrice este numărul de elemente pe care matricea este proiectată să le țină. Lungimea unei matrice nu poate fi modificată după ce a fost creată. Vă rugăm să reținețică elementele matricei sunt numerotate începând de la zero în Java. Astfel, dacă avem o matrice de 10 elemente, atunci indicele primului element este 0 și indicele ultimului este 9.
int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
Ieșire:
10
Inițializarea unei matrice și accesarea elementelor acesteia
Acum știm cum să creăm o matrice în Java. Procesul ne aduce nu o matrice goală, ci o matrice plină cu valori implicite. De exemplu, pentru o matrice int , acesta este 0, iar dacă avem o matrice de orice tip de referință, atunci valoarea implicită din fiecare celulă este null . Accesăm un element de matrice (de exemplu, pentru a-i seta valoarea, pentru a-l afișa pe ecran sau pentru a efectua o operațiune cu el) prin indexul său. Inițializarea matricei este procesul de umplere a unei matrice cu valori specifice (altele decât cele implicite). Exemplu: să creăm o matrice de șiruri pentru cele 4 sezoane și să o completăm cu numele anotimpurilor.
String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */
seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
Acum, numele anotimpurilor sunt scrise în cele patru celule ale matricei noastre. Am putea inițializa matricea într-un mod diferit, combinând declarația și inițializarea:
String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
În plus, noul operator poate fi omis:
String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};
Cum afișați o matrice pe ecran în Java?
Puteți afișa elemente de matrice pe ecran (adică pe consolă) folosind o buclă for . Un alt mod, mai scurt, de a afișa o matrice va fi discutat în paragraful intitulat „ Metode utile pentru lucrul cu matrice ”. Între timp, aruncați o privire la acest exemplu în care o matrice este afișată folosind o buclă:
String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Programul va afișa următoarele:
Winter
Spring
Summer
Autumn
Matrice unidimensionale și multidimensionale în Java
Dar dacă vrem să creăm nu o matrice de numere, șiruri de caractere sau alte obiecte, ci mai degrabă o matrice de matrice? Java vă permite să faceți acest lucru. Tipul de matrice cu care suntem deja familiarizați ( int[] myArray = new int[8] ) este cunoscut ca o matrice unidimensională. Dar o matrice de matrice se numește matrice bidimensională. Este ca un tabel care are un număr de rând și un număr de coloană. Sau, dacă ați învățat elementele de bază ale algebrei liniare, vă puteți gândi la ea ca la o matrice.
Int[][] myTwoDimentionalArray = new int[8][8];
Această matrice are exact 64 de elemente: myTwoDimentionalArray[0][0] , myTwoDimentionalArray[0][1] , myTwoDimentionalArray[1][0] , myTwoDimentionalArray[1][1] și așa mai departe până la myTwoDimentionalArray[7][7] . Deci, dacă îl folosim pentru a reprezenta o tablă de șah, atunci A1 corespunde myTwoDimentionalArray[0][0] și E2 corespunde myTwoDimentionalArray[4][1] . Dar cât de departe putem împinge asta? În Java, puteți specifica o matrice de matrice... o matrice de matrice de matrice și așa mai departe. Desigur, matricele tridimensionale și cele mai mari sunt folosite foarte rar. Acestea fiind spuse, puteți folosi o matrice tridimensională pentru a programa un cub Rubik, de exemplu.
Metode utile pentru lucrul cu matrice
Java are clasa java.util.Arrays pentru lucrul cu matrice. În general, cele mai frecvente operațiuni efectuate pe tablouri sunt inițializarea (umplerea cu elemente), preluarea unui element (prin index), sortarea și căutarea. Căutarea și sortarea matricelor sunt subiecte pentru o altă zi. Pe de o parte, este o practică bună să scrieți mai mulți algoritmi de căutare și sortare. Pe de altă parte, toți cei mai buni algoritmi au fost deja implementați și incluși în bibliotecile standard Java și îi puteți folosi legal. Iată trei metode utile din această clasă.Sortarea unei matrice
Metoda void sort(int[] myArray, int fromIndex, int toIndex) sortează o matrice sau un subbaraj întreg în ordine crescătoare.Căutarea unui element într-o matrice
int binarySearch(int[] myArray, int fromIndex, int toIndex, int key) . Această metodă caută elementul cheie într-o matrice sau subbary sortată myArray , de la fromIndex la toIndex . Dacă articolul este găsit, atunci returnează indexul său. În caz contrar, returnează (-fromIndex)-1 .Convertirea unui tablou într-un șir
Metoda String toString(int[] myArray) convertește o matrice într-un șir. În Java, matricele nu înlocuiesc toString() . Aceasta înseamnă că, dacă încercați să afișați o matrice întreagă dintr-o dată (System.out.println(myArray)) și nu un element la un moment dat, ca în paragraful intitulat „ Afișați o matrice pe ecran ”, veți obține numele clasei și hash-ul hexazecimal al matricei (definit de Object.toString() ). Dacă sunteți începător, este posibil să nu înțelegeți explicația despre metoda toString . Inițial, nu este nevoie, dar utilizarea acestei metode facilitează afișarea unei matrice. Java vă permite să afișați cu ușurință o matrice fără a utiliza o buclă. Exemplul de mai jos demonstrează acest lucru.Un exemplu folosind sort, binarySearch și toString
Să creăm o matrice de numere întregi, să o afișăm folosind toString , să o sortăm folosind metoda de sortare și apoi să găsim un număr în el.
class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
System.out.println(Arrays.toString(array)); // Display the array correctly
Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
System.out.println(Arrays.toString(array)); // Display the sorted array
int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array.
// The binarySearch method will return the index of the array element we are searching for
System.out.println(key); // Display the index of the number we searched for
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array,
// and immediately display the result
}
}
Ieșire:
[I@1540e19d
[1, 5, 4, 3, 7]
[1, 3, 4, 5, 7]
3
-1
Primul șir este o încercare de a afișa matricea fără a utiliza toString . Al doilea este matricea afișată folosind toString . Al treilea este tabloul sortat. Al patrulea este indexul numărului pe care l-am căutat (5) în tabloul sortat (rețineți că numărăm de la zero, deci indicele celui de-al patrulea element al matricei este 3). În al cincilea șir, vedem -1. Acesta este un index de matrice nevalid. Semnalează că numărul pe care l-am căutat (în acest caz, 0) nu se află în matrice.
Mai multe despre metode în clasa Array Clasa Arrays și utilizarea acesteia — Acest articol descrie câteva metode din clasa Array |
Matrice pe scurt
-
Caracteristicile esențiale ale unei matrice: tipul de date plasate în ea, numele și lungimea acesteia.
Ultima proprietate este determinată atunci când matricea este creată (când este alocată memorie pentru matrice). Primele două proprietăți sunt determinate atunci când matricea este declarată. -
Dimensiunea matricei (numărul de celule) trebuie să fie un int
-
Este imposibil să schimbați lungimea unui tablou după ce este creat.
-
Un element de matrice poate fi accesat prin indexul său.
-
Elementele din matrice, ca orice altceva în Java, sunt numerotate începând de la zero.
-
După ce o matrice este creată, aceasta este umplută cu valori implicite.
-
Matricele din Java nu sunt aceleași cu matricele din C++. Sunt aproape ca indicatori către matrice dinamice.
GO TO FULL VERSION