CodeGym /Blog Java /Aleatoriu /Matrice în Java
John Squirrels
Nivel
San Francisco

Matrice în Java

Publicat în grup
Imaginați-vă dulapuri într-o cameră de depozitare. Fiecare dintre ele are propriul său număr, iar fiecare dintre ele stochează un obiect Bagage. Sau o listă de vinuri în care fiecare fel de vin este numerotat și comandați dând numărul băuturii dvs. Sau o listă de studenți în care „Adams” este înregistrat pe prima poziție și „Zimmer” este ultimul. Sau o listă de pasageri dintr-un avion, fiecăruia cărora le este atribuit un loc numerotat. În Java, matricele sunt adesea folosite pentru a lucra cu astfel de structuri, adică seturi de date omogene.

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.Matrice în Java - 2

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;

int[] myArray;

Object[] 
arrayOfObjects;  
Este recomandabil să declarați o matrice în acest fel. Acesta este stilul Java.
2.
dataType arrayName[];

int myArray[];

Object 
arrayOfObjects[];
Metoda de declarare a matricei moștenit de la C/C++, funcționează în Java
În ambele cazuri, dataType este tipul variabilelor din matrice. În exemple, am declarat două matrice. Unul va stoca int s, iar celălalt — obiecte obiect. Astfel, o declarație de matrice are un nume și un tip (tipul elementelor matricei). ArrayName este numele matricei.

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. Matrice în Java - 3Puteți obține lungimea matricei folosind variabila lungime . De exemplu:

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. Matrice în Java - 4De ce avem nevoie de astfel de matrice? Ei bine, pentru a programa matrice și tabele, precum și alte obiecte care au o structură similară. De exemplu, o tablă de șah poate fi reprezentată printr-o matrice de 8x8. O matrice multidimensională este declarată și creată după cum urmează:

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
Clasa Arrays are 18 metode importante pentru lucrul cu matrice

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.

Materiale utile despre matrice

Doriți să aflați mai multe despre matrice? Consultați articolele de mai jos. Include o mulțime de materiale interesante și utile pe acest subiect.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION