V Javi Array je skupina podobno tipiziranih spremenljivk, na katere se nanaša skupno ime. Nizi v Javi delujejo drugače kot v C/C++. Sledi nekaj pomembnih točk o nizih Java.
Nizi v Javi
- V Javi so vsi nizi dinamično dodeljeni. (obravnavano spodaj)
- Nizi so lahko shranjeni v zveznem pomnilniku [zaporedne pomnilniške lokacije].
- Ker so polja v Javi objekti, lahko njihovo dolžino poiščemo z lastnostjo objekta dolžina . To se razlikuje od C/C++, kjer dolžino najdemo z uporabo sizeof.
- Spremenljivko polja Java je mogoče deklarirati kot druge spremenljivke z [] za podatkovnim tipom.
- Spremenljivke v matriki so urejene in vsaka ima indeks, ki se začne z 0.
- Matriko Java je mogoče uporabiti tudi kot statično polje, lokalno spremenljivko ali parameter metode.
Matrika lahko vsebuje primitivne (int, char itd.) in objektne (ali neprimitivne) reference razreda, odvisno od definicije matrike. V primeru primitivnih tipov podatkov so lahko dejanske vrednosti shranjene na sosednjih pomnilniških lokacijah (JVM ne jamči za to vedenje). V primeru predmetov razreda, dejanski objekti so shranjeni v segmentu kopice .
bash elif
Opomba: To shranjevanje matrik nam pomaga pri naključnem dostopu do elementov matrike [Podpora naključnemu dostopu].
Ustvarjanje, inicializacija in dostop do nizov
Enodimenzionalni nizi
Splošna oblika deklaracije enodimenzionalne matrike je
-- type var-name[]; -- type[] var-name;>
Deklaracija matrike ima dve komponenti: vrsto in ime. vrsta deklarira tip elementa matrike. Tip elementa določa podatkovni tip vsakega elementa, ki sestavlja matriko. Tako kot matriko celih števil lahko ustvarimo tudi matriko drugih primitivnih tipov podatkov, kot so char, float, double itd., ali uporabniško definiranih tipov podatkov (objekti razreda). Tako vrsta elementa za matriko določa, kakšno vrsto podatkov bo matrika vsebovala.
primer:
// 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;>
Čeprav prva deklaracija določa, da je int Array spremenljivka polja, dejanska matrika ne obstaja . Prevajalniku samo pove, da bo ta spremenljivka (int Array) vsebovala matriko celoštevilskega tipa. Če želite povezati matriko int z dejansko fizično matriko celih števil, jo morate dodeliti z uporabo novo in ga dodelite int Array.
Instanciranje matrike v Javi
Ko je matrika deklarirana, se ustvari samo referenca matrike. Če želite ustvariti ali dati pomnilnik matriki, ustvarite matriko, kot je ta: Splošna oblika novo kot velja za enodimenzionalne nize, je videti takole:
var-name = new type [size];>
tukaj, vrsta določa vrsto podatkov, ki se dodelijo, velikost določa število elementov v matriki in var-name je ime spremenljivke matrike, ki je povezana z matriko. Uporabiti novo dodeliti niz, določiti morate vrsto in število elementov za dodelitev.
primer:
//declaring array int intArray[]; // allocating memory to array intArray = new int[20]; // combining both statements in one int[] intArray = new int[20];>
Opomba: Elementi v matriki, ki jih dodeli novo bo samodejno inicializiran na nič (za številske vrste), lažno (za boolean), oz nič (za referenčne vrste). Sklicujte se na privzete vrednosti polja v Javi .
Pridobivanje matrike je postopek v dveh korakih. Najprej morate deklarirati spremenljivko želenega tipa matrike. Drugič, dodeliti morate pomnilnik za shranjevanje matrike z uporabo new in ga dodeliti spremenljivki matrike. torej v Javi , vse matrike so dinamično dodeljene.
Array Literal v Javi
V primeru, da so velikost matrike in spremenljivke matrike že znane, je mogoče uporabiti matrične literale.
// Declaring array literal int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 };>
- Dolžina te matrike določa dolžino ustvarjene matrike.
- V najnovejših različicah Jave ni treba pisati novega dela int[].
Dostop do elementov polja Java z uporabo zanke
Do vsakega elementa v matriki se dostopa prek njegovega indeksa. Indeks se začne z 0 in konča pri (skupna velikost polja) -1. Do vseh elementov matrike je mogoče dostopati z uporabo Java for Loop.
// accessing the elements of the specified array for (int i = 0; i>
Izvedba:
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]); } }>
Izhod
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>
Kompleksnost zgornje metode:
Časovna zahtevnost: O(n)
Pomožni prostor: O(1)
Do polj Java lahko dostopate tudi z uporabo za vsako zanko .
podatkovne strukture v Javi
Nizi predmetov v Javi
Niz predmetov je ustvarjen kot niz elementov podatkov primitivnega tipa na naslednji način.
Student[] arr = new Student[5]; //student is a user-defined class>
Sintaksa:
-- data type[] arrName; -- datatype arrName[]; -- datatype [] arrName;>
Primer nizov predmetov
Primer 1:
Spodaj je izvedba zgoraj omenjene teme:
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); } }>
Izhod
Array Size:4>
Matrika študentov vsebuje pet pomnilniških prostorov, od katerih je vsak velikosti razreda študenta, v katerem je mogoče shraniti naslove petih objektov študenta. Objekte Student je treba instancirati z uporabo konstruktorja razreda Student, njihove reference pa je treba dodeliti elementom matrike na naslednji način.
Primer 2:
Spodaj je izvedba zgoraj omenjene teme:
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); } }>
Izhod
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>
Kompleksnost zgornje metode:
Časovna zahtevnost: O(n)
Pomožni prostor: O(1)
Primer 3
Ustvari se tudi niz predmetov, kot je:
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); } } }>
Izhod
Dharma sanvi Rupa Ajay>
Kaj se zgodi, če poskušamo dostopati do elementov zunaj velikosti polja?
JVM vrže ArrayIndexOutOfBoundsException da označite, da je bil do matrike dostopan z nedovoljenim indeksom. Indeks je negativen ali večji ali enak velikosti matrike.
Spodnja koda prikazuje, kaj se zgodi, če poskušamo dostopati do elementov zunaj velikosti polja:
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]); } }>
Izhod
zamenjaj niz v Javi
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)>
Primer (iteracija matrike):
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]); } }>
Izhod
10 20>
Kompleksnost zgornje metode:
Časovna zahtevnost: O(n), tukaj je n velikost niza.
Pomožni prostor: O(1) , saj dodaten prostor ni potreben.
Večdimenzionalni nizi v Javi
Večdimenzionalni nizi so nizi nizov pri čemer vsak element matrike vsebuje referenco drugih matrik. Ti so znani tudi kot Nazobčani nizi . Večdimenzionalni niz je ustvarjen z dodajanjem enega niza oglatih oklepajev ([]) na dimenzijo.
Sintaksa večdimenzionalne matrike Java
Obstajata 2 načina za razglasitev večdimenzionalnih nizov Java, kot je navedeno spodaj:
-- datatype [][] arrayrefvariable; -- datatype arrayrefvariable[][];>
primer:
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); } }>
Izhod
Number of Rows:3 Number of Columns:3>
Deklaracija večdimenzionalne matrike
int[][] intArray = new int[10][20]; //a 2D array or matrix int[][][] intArray = new int[10][20][10]; //a 3D array>
Primer večdimenzionalne matrike v Javi
Primer 1:
Spodaj je izvedba zgornje metode:
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(); } } }>
Izhod
2 7 9 3 6 1 7 4 2>
Posredovanje nizov metodam
Tako kot spremenljivke lahko tudi matrike posredujemo metodam. Na primer, spodnji program posreduje matriko metodi vsota za izračun vsote vrednosti polja.
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); } }>
Izhod
sum of array values : 15>
Kompleksnost zgornje metode:
Časovna zapletenost: O(n)
Pomožni prostor: O(1)
Vračanje nizov iz metod
Kot običajno lahko metoda vrne tudi matriko. Na primer, spodnji program vrne matriko iz metode 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 }; } }>
Izhod
1 2 3>
Kompleksnost zgornje metode:
Časovna zahtevnost: O(n)
Pomožni prostor: O(1)
Predmeti razreda za nize
Vsaka matrika ima povezan objekt razreda, ki je v skupni rabi z vsemi drugimi matrikami z isto vrsto komponente.
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()); } }>
Izhod
class [I class java.lang.Object class [B class [S class [Ljava.lang.String;>
Razlaga zgornje metode:
- Niz [I je podpis tipa izvajalnega časa za matriko objektov razreda s tipom komponente int .
- Edini neposredni nadrazred matričnega tipa je java.lang.Object .
- Niz [B je podpis tipa izvajalnega časa za matriko objektov razreda s tipom komponente bajt .
- Niz [S je podpis tipa izvajalnega časa za matriko objektov razreda s tipom komponente kratek .
- Niz [L je podpis tipa izvajalnega časa za matriko objektov razreda s tipom komponente razreda. Nato sledi ime razreda.
Člani polja Java
Kot veste, so matrike objekti razreda, neposredni nadrazred matrik pa je razred Object. Člani matričnega tipa so vsi naslednji:
- Javno končno polje dolžina vsebuje število komponent matrike. Dolžina je lahko pozitivna ali enaka nič.
- Vsi člani so podedovani iz razreda Object; edina metoda predmeta, ki ni podedovana, je njegova klon metoda.
- Javna metoda klon() preglasi metodo klona v razredu Object in vrže št preverjene izjeme .
Tipi nizov in njihovi dovoljeni tipi elementov
Vrste nizov | Dovoljene vrste elementov |
---|---|
Nizi primitivnih tipov | Vsak tip, ki ga je mogoče implicitno povišati v deklarirani tip. |
Nizi vrst predmetov | Bodisi objekte deklariranega tipa bodisi objekte podrejenega razreda. |
Nizi tipov abstraktnih razredov | Njegovi objekti podrejenega razreda so dovoljeni. |
Nizi tipa vmesnika | Objekti njegovega izvedbenega razreda so dovoljeni. |
Kloniranje enodimenzionalne matrike v Javi
Ko klonirate enodimenzionalno matriko, kot je Object[], se izvede globoka kopija z novo matriko, ki vsebuje kopije elementov izvirne matrike v nasprotju s sklici.
java ups koncepti
Spodaj je izvedba zgornje metode:
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] + ' '); } } }>
Izhod
false 1 2 3>
Kloniranje večdimenzionalne matrike v Javi
Vendar pa je klon večdimenzionalne matrike (kot je Object[][]) plitka kopija, kar pomeni, da ustvari samo eno novo matriko, pri čemer se vsaka matrika elementov nanaša na izvirno matriko elementov, vendar so podmatri v skupni rabi.
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]); } }>
Izhod
false true true>
Pogosto zastavljena vprašanja o nizih Java
1. Ali lahko določimo velikost matrike tako dolgo?
Ne, ne moremo določiti velikosti matrike tako dolgo, lahko pa jo določimo kot int ali short.
2. Kateri je neposredni nadrazred matrike v Javi?
An Objekt je neposredni nadrazred matrike v Javi.
3. Katere vmesnike izvajajo polja v Javi?
Vsak tip matrike implementira vmesnika Cloneable in java.io.Serializable .
4. Ali lahko spremenimo velikost polja?
Velikosti matrike ni mogoče spremeniti (ko je inicializirana). Vendar pa lahko sklic na matriko kaže na drugo matriko.
Sorodni članki na to temo
- Jagged Array v Javi
- Zanka za vsako v Javi
- Razred nizov v Javi