logo

Matrice dinamică în Java

O matrice este o dimensiune fixă, omogenă structură de date . Limitarea matricelor este că au dimensiuni fixe. Înseamnă că trebuie să specificăm numărul de elemente în timp ce declarăm tabloul. Aici apare o întrebare că dacă vrem să inserăm un element și nu mai este spațiu pentru noul element? Aici, conceptul de matrice dinamică vine în existență. Ea cheltuiește dimensiunea matricei în mod dinamic.

În această secțiune, vom înțelege ce este o matrice dinamică, caracteristici ale matricei dinamice, cum se redimensionează o matrice dinamică, și cum se implementează o matrice dinamică în Java .

Ce este o matrice dinamică?

Matricea dinamică este a mărime variabilă structura de date a listei. Crește automat când încercăm să inserăm un element dacă nu mai rămâne spațiu pentru noul element. Ne permite să adăugăm și să eliminăm elemente. Alocă memorie în timpul rulării utilizând heap-ul. Își poate schimba dimensiunea în timpul rulării.

În Java , ArrayList este o implementare redimensionabilă. Implementează interfața Listă și oferă toate metodele legate de operațiunile cu listă. Puterea matricei dinamice este:

  • Căutare rapidă
  • Dimensiune variabila
  • Cache-friendly

Funcționarea matricei dinamice

În matricea dinamică, elementele sunt stocate contigu de la începutul matricei, iar spațiul rămas rămâne nefolosit. Putem adăuga elementele până când distanța rezervată este consumată complet. Când spațiul rezervat este consumat și este necesară adăugarea unor elemente. Într-un astfel de caz, matricea de dimensiuni fixe trebuie mărită în dimensiune. Rețineți că înainte de a adăuga elementul, alocăm o matrice mai mare, copiem elementele din matrice și returnăm matricea nou creată.

O altă modalitate de a adăuga un element este aceea de a crea mai întâi o funcție care creează o nouă matrice de dimensiune dublă, să copieze toate elementele din vechea matrice și să returneze noua matrice. În mod similar, putem, de asemenea, micșora dimensiunea matricei dinamice.

Dimensiune vs. capacitate

Inițializarea unui tablou dinamic creează o matrice de dimensiune fixă. În figura următoare, implementarea matricei are 10 indici. Am adăugat cinci elemente la matrice. Acum, matricea de bază are o lungime de cinci. Prin urmare, lungimea dimensiunii matricei dinamice este de 5 și capacitatea sa este de 10. Matricea dinamică ține evidența punctului final.

Matrice dinamică în Java

Caracteristicile Dynamic Array

În Java, matricea dinamică are trei caracteristici cheie: Adăugați un element, ștergeți un element și redimensionați o matrice.

Adăugați element într-o matrice dinamică

În matricea dinamică, putem crea o matrice de dimensiune fixă ​​dacă este necesar să adăugăm mai multe elemente în matrice. De obicei, creează o nouă matrice de dimensiune dublă. După aceea, copiază toate elementele în matricea nou creată. Folosim următoarea abordare:

Matrice dinamică în Java

Ștergeți un element dintr-o matrice dinamică

Dacă dorim să eliminăm un element din matrice la indexul specificat, folosim removeAt(i) metodă. Metoda analizează numărul de index al acelui element pe care dorim să-l ștergem. După ștergerea elementului, se deplasează elementele rămase (elementele care sunt direct la elementul șters) la stânga de la numărul de index specificat. De asemenea, folosim metoda remove() care șterge un element de la sfârșitul matricei. După deplasarea elementelor, se stochează 0 la palatul ultimului element. Să-l înțelegem printr-un exemplu, așa cum am arătat în figura următoare.

Matrice dinamică în Java

Redimensionarea unui tablou dinamic în Java

Trebuie să redimensionăm o matrice în două scenarii dacă:

  • Matricea folosește memorie suplimentară decât este necesar.
  • Matricea ocupă toată memoria și trebuie să adăugăm elemente.

În primul caz, folosim srinkSize() metoda de a redimensiona matrice . Reduce dimensiunea matricei. Eliberează memoria suplimentară sau nefolosită. În al doilea caz, folosim growSize() metoda de a redimensiona matricea. Mărește dimensiunea matricei.

Este o operațiune costisitoare deoarece necesită o matrice mai mare și copiază toate elementele din matricea anterioară, după care returnează noua matrice.

padding css
Matrice dinamică în Java

Să presupunem că în matricea de mai sus este necesar să adăugați încă șase elemente și, în matrice, nu mai rămâne memorie pentru a stoca elemente. În astfel de cazuri, creștem matricea folosind growSize() metodă.

Matrice dinamică în Java

Inițializați o matrice dinamică

Inițializarea matricei dinamice este aceeași cu matricea statică. Luați în considerare următorul program Java care inițializează o matrice dinamică.

InitializeDynamicArray.java

 public class InitializeDynamicArray { public static void main(String[] args) { //declaring array int array[]; //initialize an array array= new int[6]; //adding elements to the array array[0] = 34; array[1] = 90; array[2] = 12; array[3] = 22; array[4] = 9; array[5] = 27; System.out.print(&apos;Elements of Array are: &apos;); //iteraton over the array for(int i=0; i <array.length ; i++) { system.out.print(array[i] +' '); } < pre> <p> <strong>Output:</strong> </p> <pre> Elements of Array are: 34 90 12 22 9 27 </pre> <p>Let&apos;s implement the operations in a Java program that we have discussed above.</p> <p> <strong>DynamicArrayExample1.java</strong> </p> <pre> public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println(&apos;Elements of the array:&apos;); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + ' '); } system.out.println(); determines and prints the size number of elements array system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println('
elements after adding 5:'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let&apos;s shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count &gt; 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println('elements of array:'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] ' '); system.out.println(); determines and prints size number system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print('
elements element: system.out.print('no. da.count+'
'); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;></pre></array.length>

Să implementăm operațiile într-un program Java despre care am discutat mai sus.

DynamicArrayExample1.java

 public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println(&apos;Elements of the array:&apos;); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + \' \'); } system.out.println(); determines and prints the size number of elements array system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println(\'
elements after adding 5:\'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let&apos;s shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count &gt; 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println(\'elements of array:\'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] \' \'); system.out.println(); determines and prints size number system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print(\'
elements element: system.out.print(\'no. da.count+\'
\'); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;>