logo

Matrice în Java

În Java, Array este un grup de variabile similare la care se face referire printr-un nume comun. Matricele în Java funcționează diferit decât în ​​C/C++. Următoarele sunt câteva puncte importante despre matricele Java.

Matrice în Java

  • În Java, toate tablourile sunt alocate dinamic. (discutat mai jos)
  • Matricele pot fi stocate în memorie contigue [locații de memorie consecutive].
  • Deoarece tablourile sunt obiecte în Java, putem găsi lungimea lor folosind proprietatea obiect lungime . Acesta este diferit de C/C++, unde găsim lungimea folosind sizeof.
  • O variabilă matrice Java poate fi, de asemenea, declarată ca și alte variabile cu [] după tipul de date.
  • Variabilele din matrice sunt ordonate și fiecare are un index care începe cu 0.
  • Matricea Java poate fi folosită și ca câmp static, variabilă locală sau parametru de metodă.

O matrice poate conține primitive (int, char, etc.) și referințe obiect (sau non-primitive) ale unei clase, în funcție de definiția matricei. În cazul tipurilor de date primitive, valorile reale pot fi stocate în locații de memorie adiacente (JVM nu garantează acest comportament). În cazul obiectelor de clasă, obiectele reale sunt stocate într-un segment heap .

stive de java

Matrice Java



Notă: Această stocare de matrice ne ajută să accesăm aleatoriu elementele unei matrice [Support Random Access].

Crearea, inițializarea și accesarea unei matrice

Matrice unidimensionale

Forma generală a unei declarații de matrice unidimensională este

-- type var-name[]; -- type[] var-name;>

O declarație de matrice are două componente: tipul și numele. tip declară tipul de element al matricei. Tipul elementului determină tipul de date al fiecărui element care cuprinde matricea. La fel ca o matrice de numere întregi, putem crea și o matrice de alte tipuri de date primitive, cum ar fi char, float, double etc. sau tipuri de date definite de utilizator (obiecte ale unei clase). Astfel, tipul de element pentru matrice determină ce tip de date va păstra matricea.

Exemplu:

// both are valid declarations int intArray[]; int[] intArray; // similar to int we can declare // byte , short, boolean, long, float // double, char // an array of references to objects of // the class MyClass (a class created by user) MyClass myClassArray[]; // array of Object Object[] ao, // array of Collection // of unknown type Collection[] ca;>

Deși prima declarație stabilește că int Array este o variabilă matrice, nu există o matrice reală . Îi spune doar compilatorului că această variabilă (int Array) va deține o matrice de tip întreg. Pentru a lega int Array cu o matrice fizică reală de numere întregi, trebuie să alocați unul folosind nou și atribuiți-l la int Array.

Instanțierea unui Array în Java

Când o matrice este declarată, este creată doar o referință a unei matrice. Pentru a crea sau a oferi memorie matricei, creați o matrice ca aceasta: Forma generală a nou așa cum se aplică marilor unidimensionale, apare după cum urmează:

var-name = new type [size];>

Aici, tip specifică tipul de date alocate, mărimea determină numărul de elemente din matrice și var-nume este numele variabilei matrice care este legată de matrice. A folosi nou pentru a aloca o matrice, trebuie să specificați tipul și numărul de elemente de alocat.

Exemplu:

//declaring array int intArray[]; // allocating memory to array intArray = new int[20]; // combining both statements in one int[] intArray = new int[20];>

Notă: Elementele din matrice alocate de nou va fi inițializat automat la zero (pentru tipuri numerice), fals (pentru boolean), sau nul (pentru tipuri de referință). Faceți referire la valori implicite ale matricei în Java .

Obținerea unei matrice este un proces în doi pași. În primul rând, trebuie să declarați o variabilă de tipul de matrice dorit. În al doilea rând, trebuie să alocați memoria pentru a păstra matricea, folosind new, și să o atribuiți variabilei matrice. Prin urmare, în Java , toate tablourile sunt alocate dinamic.

Array Literal în Java

Într-o situație în care dimensiunea matricei și variabilele matricei sunt deja cunoscute, se pot folosi literali matrice.

// Declaring array literal int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 };>
  • Lungimea acestei matrice determină lungimea matricei create.
  • Nu este nevoie să scrieți noua parte int[] în cele mai recente versiuni de Java.

Accesarea elementelor Java Array folosind for Loop

Fiecare element din matrice este accesat prin indexul său. Indicele începe cu 0 și se termină la (dimensiunea totală a matricei) -1. Toate elementele matricei pot fi accesate folosind Java for Loop.

 // accessing the elements of the specified array for (int i = 0; i>

Implementare:

Java
// Java program to illustrate creating an array // of integers, puts some values in the array, // and prints each value to standard output. class GFG { public static void main(String[] args) { // declares an Array of integers. int[] arr; // allocating memory for 5 integers. arr = new int[5]; // initialize the first elements of the array arr[0] = 10; // initialize the second elements of the array arr[1] = 20; // so on... arr[2] = 30; arr[3] = 40; arr[4] = 50; // accessing the elements of the specified array for (int i = 0; i < arr.length; i++) System.out.println('Element at index ' + i + ' : ' + arr[i]); } }>

Ieșire
Element at index 0 : 10 Element at index 1 : 20 Element at index 2 : 30 Element at index 3 : 40 Element at index 4 : 50>

Complexitatea metodei de mai sus:

Complexitatea timpului: O(n)
Spațiu auxiliar: O(1)

De asemenea, puteți accesa matrice Java folosind pentru fiecare buclă .

ce inseamna google

Arrays-in-Java

Matrice de obiecte în Java

O matrice de obiecte este creată ca o matrice de elemente de date de tip primitiv în felul următor.

Student[] arr = new Student[5]; //student is a user-defined class>

Sintaxă:

-- data type[] arrName; -- datatype arrName[]; -- datatype [] arrName;>

Exemplu de tablouri de obiecte

Exemplul 1:

Mai jos este implementarea subiectului menționat mai sus:

Java
import java.io.*; class GFG { public static void main (String[] args) { int [] arr=new int [4]; // 4 is the size of arr System.out.println('Array Size:'+arr.length); } }>

Ieșire
Array Size:4>

Matricea student conține cinci spații de memorie, fiecare de dimensiunea clasei de elev în care poate fi stocată adresa a cinci obiecte Student. Obiectele Student trebuie instanțiate folosind constructorul clasei Student, iar referințele lor trebuie alocate elementelor matricei în felul următor.

Exemplul 2:

Mai jos este implementarea subiectului menționat mai sus:

Java
// Java program to illustrate creating // an array of objects class Student { public int roll_no; public String name; Student(int roll_no, String name) { this.roll_no = roll_no; this.name = name; } } // Elements of the array are objects of a class Student. public class GFG { public static void main(String[] args) { // declares an Array of Students Student[] arr; // allocating memory for 5 objects of type Student. arr = new Student[5]; // initialize the first elements of the array arr[0] = new Student(1, 'aman'); // initialize the second elements of the array arr[1] = new Student(2, 'vaibhav'); // so on... arr[2] = new Student(3, 'shikar'); arr[3] = new Student(4, 'dharmesh'); arr[4] = new Student(5, 'mohit'); // accessing the elements of the specified array for (int i = 0; i < arr.length; i++) System.out.println('Element at ' + i + ' : ' + arr[i].roll_no + ' ' + arr[i].name); } }>

Ieșire
Element at 0 : 1 aman Element at 1 : 2 vaibhav Element at 2 : 3 shikar Element at 3 : 4 dharmesh Element at 4 : 5 mohit>

Complexitatea metodei de mai sus:

Complexitatea timpului: O(n)
Spațiu auxiliar: O(1)

Exemplul 3

O matrice de obiecte este, de asemenea, creată ca:

Java
// Java program to illustrate creating // an array of objects class Student { public String name; Student(String name) { this.name = name; } @Override public String toString(){ return name; } } // Elements of the array are objects of a class Student. public class GFG { public static void main (String[] args) { // declares an Array and initializing the elements of the array Student[] myStudents = new Student[]{new Student('Dharma'),new Student('sanvi'),new Student('Rupa'),new Student('Ajay')}; // accessing the elements of the specified array for(Student m:myStudents){ System.out.println(m); } } }>

Ieșire
Dharma sanvi Rupa Ajay>

Ce se întâmplă dacă încercăm să accesăm elemente din afara dimensiunii matricei?

JVM aruncă Indicele matricei este în afara limitelor pentru a indica faptul că matricea a fost accesată cu un index ilegal. Indicele este fie negativ, fie mai mare sau egal cu dimensiunea unui tablou.

Codul de mai jos arată ce se întâmplă dacă încercăm să accesăm elemente din afara dimensiunii matricei:

Java
// Code for showing error 'ArrayIndexOutOfBoundsException' public class GFG { public static void main(String[] args) { int[] arr = new int[4]; arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40; System.out.println( 'Trying to access element outside the size of array'); System.out.println(arr[5]); } }>

Ieșire

Trying to access element outside the size of array Exception in thread 'main' java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 4 at GFG.main(GFG.java:13)>

Exemplu (iterarea matricei):

Java
public class GFG { public static void main(String[] args) { int[] arr = new int[2]; arr[0] = 10; arr[1] = 20; for (int i = 0; i < arr.length; i++) System.out.println(arr[i]); } }>

Ieșire
10 20>

Complexitatea metodei de mai sus:

Complexitatea timpului: O(n), aici n este dimensiunea matricei.
Spațiu auxiliar: O(1) , deoarece nu este nevoie de spațiu suplimentar.

cartonată vs broșată

Matrice multidimensionale în Java

Matricele multidimensionale sunt matrice de matrice cu fiecare element al matricei care deține referința altor matrice. Acestea sunt cunoscute și ca Jagged Arrays . O matrice multidimensională este creată prin adăugarea unui set de paranteze drepte ([]) pe dimensiune.

Sintaxa matricei multidimensionale Java

Există 2 metode pentru a declara matrice multidimensionale Java, după cum este menționat mai jos:

-- datatype [][] arrayrefvariable; -- datatype arrayrefvariable[][];>

Exemplu:

Java
// Java Program to demonstrate // Java Multidimensional Array import java.io.*; // Driver class class GFG { public static void main(String[] args) { // Syntax int[][] arr = new int[3][3]; // 3 row and 3 column // Number of Rows System.out.println('Number of Rows:'+ arr.length); // Number of Columns System.out.println('Number of Columns:'+ arr[0].length); } }>

Ieșire
Number of Rows:3 Number of Columns:3>


MultiDimensional-Array

Declarație de matrice multidimensională

int[][] intArray = new int[10][20]; //a 2D array or matrix int[][][] intArray = new int[10][20][10]; //a 3D array>

Exemplu de matrice multidimensională în Java

Exemplul 1:

Mai jos este implementarea metodei de mai sus:

Java
// Java Program to Multidimensional Array // Driver Class public class multiDimensional { // main function public static void main(String args[]) { // declaring and initializing 2D array int arr[][] = { { 2, 7, 9 }, { 3, 6, 1 }, { 7, 4, 2 } }; // printing 2D array for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) System.out.print(arr[i][j] + ' '); System.out.println(); } } }>

Ieșire
2 7 9 3 6 1 7 4 2>

Transmiterea de tablouri la metode

La fel ca variabilele, putem, de asemenea, trece matrice metodelor. De exemplu, programul de mai jos transmite matricea către metodă sumă pentru a calcula suma valorilor matricei.

Java
// Java program to demonstrate // passing of array to method public class Test { // Driver method public static void main(String args[]) { int arr[] = { 3, 1, 2, 5, 4 }; // passing array to method m1 sum(arr); } public static void sum(int[] arr) { // getting sum of array values int sum = 0; for (int i = 0; i < arr.length; i++) sum += arr[i]; System.out.println('sum of array values : ' + sum); } }>

Ieșire
sum of array values : 15>

Complexitatea metodei de mai sus:

Complexitatea timpului: Pe)
Spatiu auxiliar: O(1)

Returing Arrays de la Methods

Ca de obicei, o metodă poate returna și o matrice. De exemplu, programul de mai jos returnează o matrice de la metoda m1 .

Java
// Java program to demonstrate // return of array from method class Test { // Driver method public static void main(String args[]) { int arr[] = m1(); for (int i = 0; i < arr.length; i++) System.out.print(arr[i] + ' '); } public static int[] m1() { // returning array return new int[] { 1, 2, 3 }; } }>

Ieșire
1 2 3>

Complexitatea metodei de mai sus:

Complexitatea timpului: O(n)
Spațiu auxiliar: O(1)

Obiecte de clasă pentru matrice

Fiecare matrice are asociat un obiect Class, partajat cu toate celelalte matrice cu același tip de componentă.

Java
// Java program to demonstrate // Class Objects for Arrays class Test { public static void main(String args[]) { int intArray[] = new int[3]; byte byteArray[] = new byte[3]; short shortsArray[] = new short[3]; // array of Strings String[] strArray = new String[3]; System.out.println(intArray.getClass()); System.out.println( intArray.getClass().getSuperclass()); System.out.println(byteArray.getClass()); System.out.println(shortsArray.getClass()); System.out.println(strArray.getClass()); } }>

Ieșire
class [I class java.lang.Object class [B class [S class [Ljava.lang.String;>

Explicația metodei de mai sus:

  1. Șirul [I este semnătura tipului de rulare pentru matricea de obiecte de clasă cu tipul de componentă int .
  2. Singura superclasă directă a unui tip de matrice este java.lang.Object .
  3. Șirul [B este semnătura tipului de rulare pentru matricea de obiecte de clasă cu tip de componentă octet .
  4. Șirul [S este semnătura tipului de rulare pentru matricea de obiecte de clasă cu tip de componentă mic de statura .
  5. Șirul [L este semnătura tipului de rulare pentru matricea de obiecte de clasă cu tipul de componentă a unei clase. Numele clasei este apoi urmat.

Membrii matricei Java

Acum, după cum știți că tablourile sunt obiecte ale unei clase, iar o superclasă directă de tablouri este un obiect de clasă. Membrii unui tip de matrice sunt toți din următoarele:

  • Domeniul final public lungime conține numărul de componente ale matricei. Lungimea poate fi pozitivă sau zero.
  • Toți membrii sunt moșteniți din clasa Object; singura metodă de Object care nu este moștenită este ea clonare metodă.
  • Metoda publică clona() suprascrie metoda clonării din clasa Object și aruncă nr verificate exceptii .

Tipuri de matrice și tipurile lor de elemente permise

Tipuri de matriceTipuri de elemente permise
Matrice de tip primitivOrice tip care poate fi implicit promovat la tip declarat.
Matrice tip obiectFie obiecte de tip declarat, fie obiecte de clasă copil.
Matrice tip de clasă abstractăObiectele sale din clasa copil sunt permise.
Matrice de tip interfațăObiectele sale clase de implementare sunt permise.

Clonarea matricei unidimensionale în Java

Când clonați o matrice unidimensională, cum ar fi Object[], se realizează o copie profundă cu noua matrice care conține copii ale elementelor matricei originale, spre deosebire de referințe.

material unghiular

Mai jos este implementarea metodei de mai sus:

Java
// Java program to demonstrate // cloning of one-dimensional arrays class Test { public static void main(String args[]) { int intArray[] = { 1, 2, 3 }; int cloneArray[] = intArray.clone(); // will print false as deep copy is created // for one-dimensional array System.out.println(intArray == cloneArray); for (int i = 0; i < cloneArray.length; i++) { System.out.print(cloneArray[i] + ' '); } } }>

Ieșire
false 1 2 3>


Clonarea matricei

Clonarea matricei multidimensionale în Java

O clonă a unei matrice multidimensionale (cum ar fi Object[][]) este o copie superficială, totuși, ceea ce înseamnă că creează doar o singură matrice nouă, cu fiecare matrice de elemente o referință la o matrice de elemente originale, dar sub-tabele sunt impartit.

Java
// Java program to demonstrate // cloning of multi-dimensional arrays class Test { public static void main(String args[]) { int intArray[][] = { { 1, 2, 3 }, { 4, 5 } }; int cloneArray[][] = intArray.clone(); // will print false System.out.println(intArray == cloneArray); // will print true as shallow copy is created // i.e. sub-arrays are shared System.out.println(intArray[0] == cloneArray[0]); System.out.println(intArray[1] == cloneArray[1]); } }>

Ieșire
false true true>


Multidimensional-Array-Clone

Întrebări frecvente în matrice Java

1. Putem specifica dimensiunea matricei la fel de lungă?

Nu, nu putem specifica dimensiunea matricei ca lungă, dar o putem specifica ca int sau short.

2. Care este superclasa directă a unui tablou în Java?

Un Obiect este superclasa directă a unui tablou în Java.

3. Ce interfețe sunt implementate de Arrays în Java?

Fiecare tip de matrice implementează interfețele Cloneable și java.io.Serializabil .

4. Putem modifica dimensiunea Array?

Dimensiunea matricei nu poate fi modificată (odată inițializată). Cu toate acestea, o referință de matrice poate fi făcută pentru a indica o altă matrice.

Articole înrudite cu subiectul