V jazyku Java, Array je skupina premenných podobného typu, na ktoré sa odkazuje spoločným názvom. Polia v Jave fungujú inak ako v C/C++. Nasleduje niekoľko dôležitých bodov o poliach Java.
Polia v Jave
- V Jave sú všetky polia dynamicky alokované. (diskutované nižšie)
- Polia môžu byť uložené v súvislej pamäti [po sebe idúce miesta v pamäti].
- Keďže polia sú v jazyku Java objekty, ich dĺžku môžeme zistiť pomocou vlastnosti object dĺžka . Toto sa líši od C/C++, kde dĺžku nájdeme pomocou sizeof.
- Premenná poľa Java môže byť tiež deklarovaná ako ostatné premenné s [] za typom údajov.
- Premenné v poli sú usporiadané a každá má index začínajúci 0.
- Pole Java možno použiť aj ako statické pole, lokálnu premennú alebo parameter metódy.
Pole môže obsahovať primitívne (int, char, atď.) a objektové (alebo neprimitívne) referencie triedy v závislosti od definície poľa. V prípade primitívnych dátových typov môžu byť skutočné hodnoty uložené v súvislých pamäťových miestach (JVM toto správanie nezaručuje). V prípade objektov triedy, skutočné objekty sú uložené v segmente haldy .
poznámky pod čiarou
Poznámka: Toto ukladanie polí nám pomáha náhodne pristupovať k prvkom poľa [Support Random Access].
Vytváranie, inicializácia a prístup k poliam
Jednorozmerné polia
Všeobecná forma deklarácie jednorozmerného poľa je
-- type var-name[]; -- type[] var-name;>
Deklarácia poľa má dve zložky: typ a názov. typu deklaruje typ prvku poľa. Typ prvku určuje typ údajov každého prvku, ktorý obsahuje pole. Podobne ako pole celých čísel môžeme vytvoriť aj pole iných primitívnych dátových typov ako char, float, double atď., alebo užívateľom definované dátové typy (objekty triedy). Typ prvku pre pole teda určuje, aký typ údajov pole bude obsahovať.
Príklad:
// 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;>
Hoci prvá deklarácia stanovuje, že int Array je premenná poľa, žiadne skutočné pole neexistuje . Prekladač iba informuje, že táto premenná (int Array) bude obsahovať pole typu celé číslo. Ak chcete prepojiť int Array so skutočným fyzickým poľom celých čísel, musíte jedno prideliť pomocou Nový a priraďte ho k int Array.
Vytvorenie poľa v jazyku Java
Keď je pole deklarované, vytvorí sa iba odkaz na pole. Ak chcete vytvoriť alebo dať pamäť do poľa, vytvorte pole takto: Všeobecná forma Nový ako to platí pre jednorozmerné polia, vyzerá takto:
var-name = new type [size];>
Tu, typu špecifikuje typ pridelených údajov, veľkosť určuje počet prvkov v poli a var-name je názov premennej poľa, ktorá je prepojená s poľom. Použit Nový prideliť pole, musíte zadať typ a počet prvkov, ktoré sa majú prideliť.
Príklad:
//declaring array int intArray[]; // allocating memory to array intArray = new int[20]; // combining both statements in one int[] intArray = new int[20];>
Poznámka: Prvky v poli pridelené podľa Nový sa automaticky inicializuje na nula (pre číselné typy), falošný (pre boolean), príp nulový (pre referenčné typy). Odvolávajte sa predvolené hodnoty poľa v jazyku Java .
Získanie poľa je dvojkrokový proces. Najprv musíte deklarovať premennú požadovaného typu poľa. Po druhé, musíte alokovať pamäť na uloženie poľa pomocou new a priradiť ju k premennej poľa. teda v Jave , všetky polia sú dynamicky alokované.
Array Literal v jazyku Java
V situácii, keď veľkosť poľa a premenné poľa sú už známe, možno použiť literály poľa.
// Declaring array literal int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 };>
- Dĺžka tohto poľa určuje dĺžku vytvoreného poľa.
- Nie je potrebné písať novú časť int[] v najnovších verziách Java.
Prístup k prvkom Java Array Elements pomocou funkcie Loop
Ku každému prvku v poli sa pristupuje cez jeho index. Index začína 0 a končí na (celková veľkosť poľa) -1. Všetky prvky poľa sú prístupné pomocou Java for Loop.
// accessing the elements of the specified array for (int i = 0; i>
Implementácia:
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]); } }>
Výkon
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>
Zložitosť vyššie uvedenej metódy:
Časová zložitosť: O(n)
Pomocný priestor: O(1)
Môžete tiež pristupovať k poliam java pomocou pre každú slučku .
triedenie zoznamu polí java
Pole objektov v Jave
Pole objektov sa vytvorí ako pole údajových položiek primitívneho typu nasledujúcim spôsobom.
Student[] arr = new Student[5]; //student is a user-defined class>
Syntax:
-- data type[] arrName; -- datatype arrName[]; -- datatype [] arrName;>
Príklad polí objektov
Príklad 1:
Nižšie je uvedená implementácia vyššie uvedenej témy:
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); } }>
Výkon
Array Size:4>
Študentské pole obsahuje päť pamäťových priestorov, každý s veľkosťou študentskej triedy, do ktorých je možné uložiť adresu piatich študentských objektov. Objekty Student musia byť vytvorené pomocou konštruktora triedy Student a ich referencie by mali byť priradené k prvkom poľa nasledujúcim spôsobom.
Príklad 2:
Nižšie je uvedená implementácia vyššie uvedenej témy:
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); } }>
Výkon
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>
Zložitosť vyššie uvedenej metódy:
Časová zložitosť: O(n)
Pomocný priestor: O(1)
Príklad 3
Vytvorí sa aj pole objektov ako:
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); } } }>
Výkon
Dharma sanvi Rupa Ajay>
Čo sa stane, ak sa pokúsime získať prístup k prvkom mimo veľkosti poľa?
JVM hádže Výnimka ArrayIndexOutOfBounds na označenie, že k poľu sa pristupovalo s nelegálnym indexom. Index je buď záporný, alebo väčší alebo rovný veľkosti poľa.
Nižšie uvedený kód ukazuje, čo sa stane, ak sa pokúsime získať prístup k prvkom mimo veľkosti poľa:
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]); } }>
Výkon
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)>
Príklad (iterácia poľa):
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]); } }>
Výkon
10 20>
Zložitosť vyššie uvedenej metódy:
Časová zložitosť: O(n), tu n je veľkosť poľa.
Pomocný priestor: O(1) , pretože nie je potrebný žiadny ďalší priestor.
Viacrozmerné polia v Jave
Viacrozmerné polia sú polia polí pričom každý prvok poľa obsahuje referenciu iných polí. Tieto sú tiež známe ako Zubaté polia . Viacrozmerné pole sa vytvorí pripojením jednej sady hranatých zátvoriek ([]) ku každej dimenzii.
Syntax Java Multidimensional Array
Existujú 2 spôsoby, ako deklarovať Java Multidimenzionálne polia, ako je uvedené nižšie:
-- datatype [][] arrayrefvariable; -- datatype arrayrefvariable[][];>
Príklad:
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); } }>
Výkon
Number of Rows:3 Number of Columns:3>
java operátori
Deklarácia multidimenzionálneho poľa
int[][] intArray = new int[10][20]; //a 2D array or matrix int[][][] intArray = new int[10][20][10]; //a 3D array>
Príklad Muilti Dimensional Array v Jave
Príklad 1:
Nižšie je uvedená implementácia vyššie uvedenej metódy:
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(); } } }>
Výkon
2 7 9 3 6 1 7 4 2>
Odovzdávanie polí metódam
Podobne ako premenné, aj polia môžeme odovzdávať metódam. Napríklad nižšie uvedený program odovzdá pole metóde súčet na výpočet súčtu hodnôt poľa.
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); } }>
Výkon
sum of array values : 15>
Zložitosť vyššie uvedenej metódy:
Časová zložitosť: O(n)
Pomocný priestor: O(1)
Vrátenie polí z metód
Ako obvykle, metóda môže vrátiť aj pole. Napríklad nižšie uvedený program vráti pole z metódy 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 }; } }>
Výkon
1 2 3>
Zložitosť vyššie uvedenej metódy:
Časová zložitosť: O(n)
Pomocný priestor: O(1)
Objekty triedy pre polia
Každé pole má priradený objekt Class, zdieľaný so všetkými ostatnými poliami s rovnakým typom komponentu.
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()); } }>
Výkon
class [I class java.lang.Object class [B class [S class [Ljava.lang.String;>
Vysvetlenie vyššie uvedenej metódy:
- Reťazec [I je podpis typu run-time pre pole objektov triedy s typom komponentu int .
- Jediná priama nadtrieda typu poľa je java.lang.Object .
- Reťazec [B je podpis typu run-time pre pole objektov triedy s typom komponentu byte .
- Reťazec [S je podpis typu run-time pre pole objektov triedy s typom komponentu krátky .
- Reťazec [L je podpis typu run-time pre pole objektov triedy s typom komponentu triedy. Potom nasleduje názov triedy.
Členovia Java Array
Teraz, ako viete, polia sú objekty triedy a priama nadtrieda polí je trieda Object. Členmi typu poľa sú všetky nasledujúce:
- Verejné finále dĺžka obsahuje počet komponentov poľa. Dĺžka môže byť kladná alebo nulová.
- Všetky členy sú zdedené z triedy Object; jediná metóda objektu, ktorá sa nededí, je jeho klonovať metóda.
- Verejná metóda klon() prepíše metódu clone v triede Object a vyhodí č skontrolované výnimky .
Typy polí a ich povolené typy prvkov
Typy polí | Povolené typy prvkov |
---|---|
Polia primitívnych typov | Akýkoľvek typ, ktorý možno implicitne povýšiť na deklarovaný typ. |
Polia typu objektu | Buď objekty deklarovaného typu, alebo sú to objekty podriadenej triedy. |
Abstraktné polia typu triedy | Objekty podradenej triedy sú povolené. |
Polia typu rozhrania | Objekty triedy implementácie sú povolené. |
Klonovanie jednorozmerného poľa v Jave
Keď klonujete jednorozmerné pole, ako napríklad Object[], vykoná sa hĺbková kópia s novým poľom obsahujúcim kópie prvkov pôvodného poľa na rozdiel od referencií.
a-b prerezávanie
Nižšie je uvedená implementácia vyššie uvedenej metódy:
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] + ' '); } } }>
Výkon
false 1 2 3>
Klonovanie viacrozmerného poľa v jazyku Java
Klon viacrozmerného poľa (ako Object[][]) je však plytká kópia, čo znamená, že vytvára iba jedno nové pole s každým poľom prvkov odkazujúcim na pôvodné pole prvkov, ale podpole sú zdieľané.
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]); } }>
Výkon
false true true>
Často kladené otázky v poli Java
1. Môžeme určiť veľkosť poľa ako dlho?
Nie, nemôžeme určiť veľkosť poľa ako dlhú, ale môžeme ju zadať ako int alebo short.
2. Ktorá je priama nadtrieda poľa v Jave?
An Objekt je priama nadtrieda poľa v jazyku Java.
3. Ktoré rozhrania implementujú polia v jazyku Java?
Každý typ poľa implementuje rozhrania Cloneable a java.io.Serializovateľné .
4. Môžeme zmeniť veľkosť poľa?
Veľkosť poľa sa nedá zmeniť (po inicializácii). Avšak odkaz na pole môže byť urobený tak, aby ukázal na iné pole.
Súvisiace články k téme
- Jagged Array v jazyku Java
- Pre každú slučku v jazyku Java
- Trieda polí v jazyku Java