Kako podesiti pametne telefone i računare. Informativni portal

Deklaracija niza u Javi. Nizovi u Javi

  • Java,
  • Algoritmi
    • Tutorial

    Mislim da će malo onih koji se spremaju za prvi intervju, prilikom prijavljivanja za prvi posao (pre)junior programera, negativno odgovoriti na ovo pitanje. Ili barem sumnjate u pozitivan odgovor. Naravno, tako jednostavna struktura podataka sa direktnim pristupom indeksu - bez trikova! Ne, u nekim jezicima kao što su JavaScript ili PHP, nizovi su, naravno, implementirani na vrlo zanimljiv način i u suštini su mnogo više od pukog niza. Ali ne govorimo o tome, već o „tradicionalnoj“ implementaciji nizova u obliku „čvrste oblasti memorije“. U ovom slučaju, na osnovu indeksa i veličine jednog elementa, adresa se jednostavno izračunava i pristupa se odgovarajućoj vrijednosti. Šta je tu tako teško?
    Hajde da to shvatimo. Na primjer, u Javi. Tražiti od nesuđenog kandidata da kreira niz cijelih brojeva n x n. Osoba samouvjereno piše nešto poput:
    int g = novi int[n][n];
    Odlično. Sada tražimo da inicijalizirate elemente niza nečim. Bar u jedinicama, barem kao zbir indeksa. Dobijamo:
    for(int i = 0; i< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } }
    Čak i češće pišu
    for(int i = 0; i< g.length; i++) { for(int j = 0; j < g[i].length; j++) { g[i][j] = i + j; } }
    što je takođe povod za razgovor, ali sada pričamo o nečem drugom. Pokušavamo saznati šta čovjek zna i vidjeti kako razmišlja. Stoga mu skrećemo pažnju na činjenicu da se vrijednosti nalaze simetrično i tražimo od njega da uštedi na iteracijama petlje. Naravno, zašto prolaziti kroz sve vrijednosti indeksa kada možete proći samo kroz donji trokut? Subjekt se obično lako slaže i mudro naglašavajući glavnu dijagonalu pažljivo napiše nešto poput:
    for(int i = 0; i< n; i++) { g[i][i] = 2* i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } }
    Umjesto g[i][i] = 2* i; često se piše g[i][i] = i + i; ili g[i][i] = i<< 1; и это тоже повод поговорить. Но мы идем дальше и задаем ключевой вопрос: Koliko će brže raditi program?. Uobičajeno rezonovanje je sljedeće: skoro 2 puta manje izračunavanja indeksa; gotovo 2 puta manje izračunavanja vrijednosti (zbrajanje); isti broj zadataka. To znači 30 posto brže.Ako osoba ima dobru matematičku pozadinu, onda čak možete vidjeti tačan broj sačuvanih operacija i razumniju procjenu efikasnosti optimizacije.
    Sada je vrijeme za glavni udarac. Pokrećemo obje verzije koda na nekoj dovoljno velikoj vrijednosti n(oko nekoliko hiljada), na primjer, ovako.

    Vremenski kontrolisan kod

    class A ( public static void main(String args) (int n = 8000; int g = new int[n][n]; long st, en; // jedan st = System.nanoTime(); for(int i = 0;i< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nOne time " + (en - st)/1000000.d + " msc"); // two st = System.nanoTime(); for(int i = 0; i < n; i++) { g[i][i] = i + i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nTwo time " + (en - st)/1000000.d + " msc"); } }


    šta vidimo? Optimizirana verzija radi 10-100 puta sporije! Sada je vrijeme da posmatramo reakciju kandidata na poziciju. Kakva će biti reakcija na neobičnu (tačnije, uobičajenu u praksi programera) stresnu situaciju. Ako lice optuženog pokazuje uzbuđenje i on počne da pritiska dugmad, privremeno zaboravljajući na vaše postojanje, onda je to dobar znak. U određenoj mjeri. Ne želite da zaposlite istraživača koji ne brine o ishodu projekta, zar ne? Onda mu nemojte postavljati pitanje "Zašto?" Zamolite ih da prerade drugu opciju tako da zapravo radi brže od prve.
    Sada možete bezbedno da se bavite svojim poslom neko vreme. Za pola sata imat ćete dovoljno materijala za procjenu osnovnih ličnih i profesionalnih kvaliteta kandidata.
    Usput, kada sam ukratko opisao ovaj problem na svojoj web stranici, najpopularniji komentar je bio “Ovo je vaša Java kriva.” Objavljujem kod na Great and Free posebno za njih. A sretni vlasnici Free Pascal za Windows mogu pogledati

    ispod spojlera

    vrijeme programa; usesWindows; var start, završetak, res: int64; n, i, j: Integer; g: Niz niza cijelih brojeva; početak n:= 10000; SetLength(g, n, n); QueryPerformanceFrequency(res); QueryPerformanceCounter(start); za i:=1 do n-1 do za j:=1 do n-1 do g := i + j; QueryPerformanceCounter(finish); writeln("Vrijeme po redovima:", (kraj - početak) / res, "sek"); QueryPerformanceCounter(start); za i:=1 do n-1 do za j:=1 do n-1 do g := i + j; QueryPerformanceCounter(finish); writeln("Vrijeme po kolonama:", (završetak - početak) / res, "sek"); kraj.


    U gornjem kodu u Pascalu, uklonio sam "zbunjujuće" aspekte i ostavio samo suštinu problema. Ako se ovo može nazvati problemom.
    Koja pitanja na kraju postavljamo optuženom?
    1. Zašto radi sporije? I detaljnije...
    2. Kako ubrzati inicijalizaciju?

    Ako postoji potreba da se dublje kopa u Java implementaciju, onda tražimo od podnosioca prijave da prati vrijeme izvršenja za male vrijednosti n. Na primjer, na ideone.com za n=117, opcija “optimizirana” je upola sporija. Ali za sljedeću vrijednost n=118 ispada da je već 100 (sto) puta brži od neoptimizirane! Predložite eksperimentiranje na lokalnoj mašini. Pustite ga da se igra sa podešavanjima.
    Usput, da li svi razumiju šta se dešava?

    Nekoliko riječi opravdanja

    Želio bih reći nekoliko riječi kojima bih opravdao ovu metodu intervjua za zapošljavanje. Da, ne testiram poznavanje sintakse jezika i poznavanje struktura podataka. Možda na civiliziranom tržištu rada sve ovo funkcionira. Ali u našim uslovima totalnog nedostatka kvalifikovanog kadra, moramo pre vrednovati dugoročnu adekvatnost kandidata za posao sa kojim će se suočiti. One. sposobnost učenja, probijanja, razumijevanja, rada.
    Ovo je po duhu slično "intervjuu" za regrutaciju legionara u starom Rimu. Budući ratnik je bio jako uplašen i gledao je da li je pocrveneo ili prebledeo. Ako problijedi, tada u stresnoj situaciji podnosiočevu krv curi iz glave i on je sklon pasivnoj reakciji. Na primjer, nesvjestica. Ako je podnosilac predstavke pocrveneo, tada mu je krv navirala u glavu. One. sklon je aktivnim akcijama i uletima u tuče. Ovaj se smatrao prikladnim.
    Pa, još jedna stvar. Zašto sam svima pričao o ovom zadatku umjesto da ga nastavim koristiti u intervjuima? Samo što su potencijalni kandidati već "naučili" ovaj zadatak i moraju koristiti druge.
    Zapravo, obratio sam pažnju na ovaj efekat upravo u vezi sa stvarnim zadatkom obrade slike. Situacija je bila pomalo zbunjujuća i nisam odmah shvatio zašto mi je fps toliko opao nakon refaktoriranja. Općenito, svi vjerovatno imaju puno takvih divnih trenutaka.

    Do sada je vodeća verzija da je kriva keš procesora. One. sekvencijalni pristup u prvoj opciji radi unutar hash-a, koji se ažurira kada se pređe preko određene granice. Kada se pristupa po kolonama, hash je prisiljen da se stalno ažurira i to oduzima dosta vremena. Pogledajmo ovu verziju u njenom najčistijem obliku. Kreirajmo niz i uporedimo šta je brže - obraditi sve elemente u nizu ili obraditi elemente niza sa slučajnim brojem isti broj puta? Ovaj program je ideone.com/tMaR2S. Za 100.000 elemenata niza, nasumični pristup je obično znatno brži. Šta to znači?
    Ovdje mi je sasvim ispravno ukazano (Big_Lebowski) da preuređivanje petlji mijenja rezultate u korist sekvencijalne opcije. Zbog čistoće eksperimenta, morao sam postaviti ciklus zagrijavanja. Istovremeno, uradio sam nekoliko ponavljanja da bih dobio prosečno vreme rada kako je Leventov savetovao. Ispalo je ovako ideone.com/yN1H4g. One. Nasumični pristup elementima velikog niza je ~10% sporiji od sekvencijalnog pristupa. Možda keš memorija zaista može igrati određenu ulogu. Međutim, u prvobitnoj situaciji performanse su značajno pale. Dakle, postoji nešto drugo.

    Postepeno, verzija o dodatnim radnjama pri prelasku iz jednog reda niza u drugi postaje vodeća. I to je tačno. Ostaje da se utvrdi šta se tačno tamo dešava.

    Tagovi:

    • Programiranje
    • nizovi
    • memorija
    Dodaj oznake

    Posljednje ažuriranje: 09.11.2018

    Niz predstavlja skup vrijednosti istog tipa. Deklariranje niza slično je deklariranju regularne varijable koja pohranjuje jednu vrijednost, a postoje dva načina da se deklarira niz:

    data_type array_name; // bilo data_type array_name;

    Na primjer, definirajmo niz brojeva:

    Int nums; int nums2;

    Nakon što deklarišemo niz, možemo ga inicijalizirati:

    Int nums; nums = novi int; // niz od 4 broja

    Niz se kreira pomoću sljedeće konstrukcije: novi tip_podataka[broj elemenata] , gdje je new ključna riječ koja dodjeljuje memoriju za broj elemenata navedenih u zagradama. Na primjer, nums = new int; - ovaj izraz kreira niz od četiri int elementa, a svaki element će imati zadanu vrijednost 0.

    Također možete odmah inicijalizirati niz kada ga deklarirate:

    Int nums = novi int; // niz od 4 broja int nums2 = new int; // niz od 5 brojeva

    Sa takvom inicijalizacijom, svi elementi niza imaju zadanu vrijednost. Za numeričke tipove (uključujući tip char) ovo je broj 0, za boolean tip ovo je false, a za druge objekte je null. Na primjer, za tip int zadana vrijednost je 0, tako da će se gore definirani niz brojeva sastojati od četiri nule.

    Međutim, možete postaviti i određene vrijednosti za elemente niza kada ga kreirate:

    // ove dvije metode su ekvivalentne int nums = new int (1, 2, 3, 5); int brojevi2 = (1, 2, 3, 5);

    Vrijedi napomenuti da u ovom slučaju uglaste zagrade ne označavaju veličinu niza, jer se izračunava prema broju elemenata u vitičastim zagradama.

    Nakon kreiranja niza, možemo pristupiti bilo kojem njegovom elementu pomoću indeksa, koji se prosljeđuje u uglastim zagradama iza imena varijable niza:

    Int nums = novi int; // postavlja vrijednosti elemenata niza nums = 1; brojevi = 2; brojevi = 4; brojevi = 100; // dobijemo vrijednost trećeg elementa niza System.out.println(nums); // 4

    Indeksiranje elemenata niza počinje od 0, tako da u ovom slučaju, da bismo pristupili četvrtom elementu u nizu, moramo koristiti izraz nums.

    A pošto je naš niz definiran za samo 4 elementa, ne možemo pristupiti, na primjer, šestom elementu: nums = 5; . Ako to pokušamo da uradimo, dobićemo grešku.

    Dužina niza

    Najvažnije svojstvo koje nizovi imaju je svojstvo dužine, koje vraća dužinu niza, odnosno broj njegovih elemenata:

    Int brojevi = (1, 2, 3, 4, 5); int dužina = nums.length; // 5

    Nije neuobičajeno da posljednji indeks bude nepoznat, a da bismo dobili posljednji element niza, možemo koristiti ovo svojstvo:

    Int last = brojevi;

    Višedimenzionalni nizovi

    Prethodno smo gledali jednodimenzionalne nizove, koji se mogu predstaviti kao lanac ili niz vrijednosti istog tipa. Ali pored jednodimenzionalnih nizova, postoje i višedimenzionalni. Najpoznatiji multidimenzionalni niz je tabela koja predstavlja dvodimenzionalni niz:

    Int nums1 = novi int (0, 1, 2, 3, 4, 5); int nums2 = ( ( 0, 1, 2 ), ( 3, 4, 5 ) );

    Vizuelno se oba niza mogu predstaviti na sljedeći način:

    Jednodimenzionalni niz nums1
    Dvodimenzionalni niz nums2

    Pošto je niz nums2 dvodimenzionalan, to je jednostavna tabela. Može se kreirati i ovako: int nums2 = new int; . Broj uglatih zagrada označava veličinu niza. A brojevi u zagradama označavaju broj redova i kolona. Takođe, koristeći indekse, možemo koristiti elemente niza u programu:

    // postavlja element prve kolone drugog reda nums2=44; System.out.println(nums2);

    Deklaracija trodimenzionalnog niza može izgledati ovako:

    Int nums3 = novi int;

    Jagged array

    Višedimenzionalni nizovi se takođe mogu predstaviti kao "nazubljeni nizovi". U gornjem primjeru, dvodimenzionalni niz je imao 3 reda i 3 kolone, tako da smo imali ravnu tabelu. Ali svakom elementu u dvodimenzionalnom nizu možemo dodijeliti poseban niz s različitim brojem elemenata:

    Int nums = novi int; nums = novi int; nums = novi int; nums = novi int;

    za svaki

    Posebna verzija for petlje dizajnirana je za ponavljanje elemenata u skupovima elemenata, kao što su nizovi i kolekcije. Slična je foreach petlji koja se nalazi u drugim programskim jezicima. Njegovo zvanično saopštenje:

    Za (ime_varijable tipa_podataka: kontejner)( // akcije)

    Na primjer:

    Int niz = novi int (1, 2, 3, 4, 5); for (int i: niz)( System.out.println(i); )

    U ovom slučaju, kontejner je niz podataka tipa int. Tada se deklariše varijabla tipa int

    Ista stvar se može uraditi sa regularnom verzijom za:

    Int niz = novi int (1, 2, 3, 4, 5); za (int i = 0; i< array.length; i++){ System.out.println(array[i]); }

    U isto vrijeme, ova verzija for petlje je fleksibilnija nego for (int i: array) . Konkretno, u ovoj verziji možemo promijeniti elemente:

    Int niz = novi int (1, 2, 3, 4, 5); za (int i=0; i

    Petlja kroz višedimenzionalne nizove

    int brojevi = novi int ( (1, 2, 3), (4, 5, 6), (7, 8, 9) ); za (int i = 0; i< nums.length; i++){ for(int j=0; j < nums[i].length; j++){ System.out.printf("%d ", nums[i][j]); } System.out.println(); }

    Prvo se kreira petlja za iteraciju po redovima, a zatim unutar prve petlje kreira se unutrašnja petlja za iteraciju preko stupaca određenog reda. Na sličan način možete iterirati preko trodimenzionalnih nizova i skupova s ​​velikim brojem dimenzija.


    Studirajte da postanete "Game Developer" + zaposlenje

    Java nizovi

    Niz je struktura podataka koja pohranjuje vrijednosti istog tipa. Pojedinačnom elementu niza se pristupa pomoću celobrojnog indeksa. Na primjer, ako je a niz cijelih brojeva, tada je vrijednost izraza a[i] jednaka i-tom cijelom broju u nizu.

    Niz se deklarira na sljedeći način: prvo se naznačuje tip niza, odnosno tip elemenata sadržanih u nizu, nakon čega slijedi par praznih uglastih zagrada, a zatim naziv varijable. Na primjer, evo kako deklarirati niz koji se sastoji od cijelih brojeva:
    int a;

    Međutim, ova izjava samo deklarira varijablu a, bez inicijalizacije stvarnim nizom. Da biste kreirali niz, morate koristiti operator new.

    Ovaj operator kreira niz od 100 cijelih brojeva. Elementi ovog niza su numerisani od 0 do 99 (ne od 1 do 100). Jednom kreiran, niz se može popuniti, na primjer, pomoću petlje.

    int a = novi int;
    za (int i = 0; i< 100; i++)
    a[i] = i; // Ispunjava niz brojevima od 0 do 99.

    Ako pokušate pristupiti elementu a (ili bilo kojem drugom elementu čiji je indeks izvan raspona od 0 do 99) kreiranjem niza od 100 elemenata, program će se prekinuti jer će biti izbačen izuzetak indeksa niza izvan granica.
    Da prebrojite broj elemenata u nizu, koristite metodu nameArray-
    va.length.

    Na primjer,

    za (int i = 0; i< a. length; i++ System.out.println (a[i]);

    Jednom kada je niz kreiran, nemoguće je promijeniti njegovu veličinu (iako možete, naravno, promijeniti njegove pojedinačne elemente). Ako trebate često mijenjati veličinu niza tokom izvršavanja programa, bolje je koristiti drugu strukturu podataka koja se zove lista nizova.

    Niz se može deklarisati na dva načina:

    int a;
    ili
    int a;

    Većina Java programera preferira prvi stil jer jasnije odvaja tip niza int od imena varijable.

    Inicijalizatori niza i neimenovani nizovi

    Java ima mogućnost da istovremeno kreira niz i inicijalizira ga. Evo primjera takve sintaktičke strukture:

    int smallPrimes = ( 2, 3, 5, 7, 11, 13);

    Imajte na umu da u ovom slučaju nema potrebe za korištenjem novog operatora. Dodatno, možete čak inicijalizirati neimenovani niz:

    novi int ( 16, 19, 23, 29, 31, 37)

    Ovaj izraz dodjeljuje memoriju za novi niz i ispunjava ga brojevima navedenim u vitičastim zagradama. U ovom slučaju izračunava se njihov broj i, shodno tome, određuje se veličina niza. Ova sintaktička konstrukcija je zgodna za korištenje za reinicijalizaciju niza bez kreiranja nove varijable. Na primjer, izraz

    smallPrimes = new int( 17, 19, 23, 29, 31, 37);
    je skraćeni izraz
    int anoniman = ( 17, 19, 23, 29, 31, 37 );
    smailPrimes = anoniman;

    Možete kreirati niz nulte veličine. Takav niz može biti koristan kada se piše metoda koja procjenjuje niz za koji se ispostavi da je prazan. Niz nulte dužine je deklarisan na sledeći način:

    nova vrsta elementa

    Imajte na umu da takav niz nije ekvivalentan nultom objektu.

    Kopiranje nizova

    Jedan niz se može kopirati u drugi, ali će se obje varijable odnositi na isti niz.

    int luckyNumbers = smailPrimes;
    luckyNimbers = 12; // Sada je element smailPrimes također 12.

    Rezultat je prikazan na sl. 3.14. Ako trebate kopirati sve elemente jednog niza u drugi, trebali biste koristiti metodu arraycopy iz klase System. Njegov poziv izgleda ovako:

    System.arraycopy(from, fromlndex, to, tolndex, count);

    Niz to mora biti dovoljno velik da sadrži sve elemente koje treba kopirati.

    Rice. 3.14. Kopiranje niza

    Na primjer, dolje prikazani operatori, čiji su rezultati prikazani na Sl. 3.15, kreirajte dva niza, a zatim kopirajte posljednja četiri elementa prvog niza u drugi. Kopiranje počinje od druge pozicije u izvornom nizu, a kopirani elementi se postavljaju u ciljni niz počevši od treće pozicije.

    int smailPrimes = (2, 3, 5, 7, 11, 13);
    int luckyNumbers = (1001, 1002, 1003, 1004, 1005, 1006, 1007);
    System.aggausor(smailPrimes, 2, luckyNumbers, 3, 4);
    za (int i = 0; i< luckyNumbers.length; i++)
    System.println(i +.": " + luckyNumbersfi]);

    Izvođenje ovih naredbi daje sljedeći rezultat.

    0: 1001
    1: 1002
    2: 1003
    3: 5
    4: 7
    5: 11
    6: 13

    Rice. 3.15. Kopiranje elemenata niza

    Niz u Javi se značajno razlikuje od niza u C++. Međutim, to je praktično isto što i pokazivač na dinamički niz. To znači da operater

    int a = novi int; //Java
    je ekvivalentan operatoru
    i n t * = novo i n t [ 1 0 0 ] ; // C++,
    ali ne
    int a; // C++

    U Javi, zadani no operator provjerava opseg indeksa. Osim toga, Java nema aritmetiku pokazivača – ne možete povećati pokazivač da biste pristupili sljedećem elementu niza.

    Niz je struktura podataka koja je dizajnirana za pohranjivanje podataka istog tipa. Nizovi rade drugačije u Javi nego u C/C++. Posebnosti:

    • Pošto su nizovi objekti, možemo pronaći njihovu dužinu. Ovo se razlikuje od C/C++ gdje nalazimo dužinu koristeći sizeof.
    • Varijabla niza također može biti .
    • Varijable su poređane i imaju indeks koji počinje od 0.
    • Može se koristiti i kao statičko polje, lokalna varijabla ili parametar metode.
    • Veličina niza mora biti navedena kao int, a ne duga ili kratka.
    • Direktna superklasa tipa niza je Object.
    • Svaki tip niza implementira Cloneable i java.io.Serializable interfejse.

    Inicijalizacija i pristup nizu

    Jednodimenzionalni nizovi: Opšti oblik deklaracije

    Upišite ime-varijante; ili upišite ime-varijante;

    Deklaracija ima dvije komponente: tip i ime. type deklarira tip elementa niza. Tip elementa određuje tip podataka svakog elementa.

    Osim tipa int, možemo kreirati i niz drugih tipova podataka kao što su char, float, double ili korisnički definirani tip podataka (objekti klase).Tako, tip elementa određuje koji će tip podataka biti pohranjen u nizu. Na primjer:

    // obje su važeće deklaracije int intArray; ili int intArray; byte byteArray; shortsArray; boolean booleanArray; long longArray; float floatArray; double doubleArray; char charArray; // niz referenci na objekte // klase MyClass (klasa koju je stvorio // korisnik) MyClass myClassArray; Objekt ao, // niz zbirke objekata ca; // niz kolekcije // nepoznatog tipa

    Iako prva deklaracija iznad utvrđuje činjenicu da je intArray varijabla niza, niz zapravo ne postoji. To jednostavno govori kompajleru da je ova varijabla tipa cijeli broj.

    Da biste povezali niz int sa stvarnim fizičkim nizom cijelih brojeva, morate ga označiti sa new i dodijeliti ga int.

    Kako kreirati niz u Javi

    Kada se deklarira niz, kreira se samo referenca na niz. Da biste stvarno kreirali ili dodijelili memoriju nizu, morate kreirati niz na sljedeći način: Opći oblik novog kada se primjenjuje na jednodimenzionalne je sljedeći:
    var-name = novi tip;

    Ovdje tip označava tip podataka, veličina je broj elemenata u nizu, a ime-vare je ime varijable niza.

    intArray; //deklaracija intArray = new int; // dodjela memorije

    Int intArray = novi int; // Union

    Važno je znati da se elementi niza dodijeljeni novom funkcijom automatski inicijaliziraju na nulu (za numeričke tipove), false (za Boolean tipove) ili nulu (za referentne tipove).
    Dobijanje niza je proces u dva koraka. Prvo morate deklarirati varijablu željenog tipa. Drugo, potrebno je da dodijelite memoriju koja će sadržavati niz koristeći new i dodijeliti ga varijabli. Dakle, u Javi se svi nizovi dodeljuju dinamički.

    Literali niza

    U situaciji kada su veličina niza i varijable već poznate, mogu se koristiti literali.

    Int intArray = new int( 1,2,3,4,5,6,7,8,9,10); // Deklariranje literala niza

    • Dužina ovog niza određuje dužinu kreiranog niza.
    • Nema potrebe za pisanjem int u najnovijim verzijama Jave

    Pristupanje elementima Java niza pomoću For petlje

    Svakom elementu niza se pristupa preko njegovog indeksa. Indeks počinje na 0 i završava na (ukupna veličina)-1. Svim elementima se može pristupiti pomoću for petlje.

    Za (int i = 0; i< arr.length; i++) System.out.println("Element at index " + i + " : "+ arr[i]);

    // Primjer za ilustraciju kreiranja niza
    // cijeli brojevi, stavlja neke vrijednosti u niz,
    // i ispisuje svaku vrijednost.

    klasa GFG
    {

    {

    int arr;

    // dodjeljivanje memorije za 5 cijelih brojeva.
    arr = novi int;


    arr = 10;


    arr = 20;

    //tako dalje...
    arr = 30;
    arr = 40;
    arr = 50;

    // pristup elementima navedenog niza
    za (int i = 0; i< arr.length; i++)
    System.out.println("Element na indeksu " + i +
    " : "+ arr[i]);
    }
    }
    Kao rezultat dobijamo:

    Element na indeksu 0: 10 Element na indeksu 1: 20 Element na indeksu 2: 30 Element na indeksu 3: 40 Element na indeksu 4: 50

    Nizovi objekata

    Niz objekata kreira se na isti način kao i elementi podataka kako slijedi:

    Student arr = novi učenik;

    StudentArray sadrži sedam memorijskih elemenata svaki od student klase, u koje se mogu pohraniti adrese sedam Student objekata. Studentski objekti moraju biti kreirani pomoću konstruktora klase učenika i njihove reference moraju biti dodijeljene elementima niza na sljedeći način:

    Student arr = novi učenik;

    // Java program za ilustraciju kreiranja niza
    // objekti

    razred Učenik
    {
    javni int roll_no;
    javni naziv stringa;
    Student (int roll_no, ime niza)
    {
    this.roll_no = roll_no;
    this.name = ime;
    }
    }

    // Elementi niza su objekti klase Student.
    javna klasa GFG
    {
    javni statički void main (String args)
    {
    // deklarira niz cijelih brojeva.
    Student arr;

    // dodjeljivanje memorije za 5 objekata tipa Student.
    arr = novi učenik;

    // inicijalizira prve elemente niza
    arr = novi Student(1,"aman");

    // inicijalizira druge elemente niza
    arr = novi Student(2,"vaibhav");

    // tako dalje...
    arr = novi Student(3,"shikar");
    arr = novi Student(4,"dharmesh");
    arr = novi Student(5,"mohit");

    // pristup elementima navedenog niza
    za (int i = 0; i< arr.length; i++)
    System.out.println("Element na " + i + " : " +
    arr[i].roll_no +" "+ arr[i].name);
    }
    }

    Dobijamo:

    Element u 0: 1 aman Element u 1: 2 vaibhav Element u 2: 3 shikar Element u 3: 4 dharmesh Element u 4: 5 mohit

    Šta se događa ako pokušamo pristupiti elementu izvan niza?
    Kompajler izbacuje izuzetak ArrayIndexOutOfBoundsException koji pokazuje da je nizu pristupljeno na nevažećem indeksu. Indeks je ili negativan ili veći ili jednak veličini niza.

    Multidimenzionalno

    Višedimenzionalni nizovi su nizovi nizova u kojima svaki element sadrži referencu na drugi niz. Kreirano dodavanjem jednog skupa uglastih zagrada () za svaku dimenziju. Pogledajmo primjer:

    Int intArray = novi int; // 2D niz ili matrica int intArray = new int; //3D niz

    klasa multidimenzionalna
    {
    public static void main (args niza)
    {
    // deklarisanje i inicijalizacija 2D niza
    int arr = ( (2,7,9),(3,6,1),(7,4,2) );

    // ispis 2D niza
    za (int i=0; i< 3 ; i++)
    {
    za (int j=0; j< 3 ; j++)
    System.out.print(arr[i][j] + " ");

    System.out.println();
    }
    }
    }

    Izlaz: 2 7 9 3 6 1 7 4 2


    Prosljeđivanje nizova metodi

    Baš kao i varijable, možemo proslijediti nizove metodama.

    // Java program za demonstraciju // prosljeđivanje niza u klasu metode Test ( // Metoda drajvera public static void main(String args) ( int arr = (3, 1, 2, 5, 4); // prosljeđivanje niza metodi m1 sum(arr); ) public static void sum(int arr) ( // dobivanje sume vrijednosti niza int sum = 0; for (int i = 0; i< arr.length; i++) sum+=arr[i]; System.out.println("sum of array values: " + sum); } }

    Na izlazu dobijamo:

    zbir vrijednosti niza: 15

    Vraćanje nizova iz metoda

    Kao i obično, metoda također može vratiti niz. Na primjer, program ispod vraća niz iz m1 metode.

    // Java program za demonstraciju // povratak niza iz klase metode Test ( // Metoda drajvera 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}; } }

    Objekti klase

    Svaki niz ima pridruženi objekt klase koji se dijeli sa svim drugim nizovima s istim tipom komponente.

    // Java program za demonstraciju // Class Objects for Arrays class Test ( public static void main(String args) ( int intArray = new int; byte byteArray = new byte; short shortsArray = new short; // niz nizova String strArray = novi string; 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()); ) )

    klasa +" "); ) ) )

    Klon višedimenzionalnog niza (kao što je Object) je kopija, što znači da kreira samo jedan novi niz sa svakim elementom i referencom na originalni niz elemenata, ali ugniježđeni nizovi se dijele.

    // Java program za demonstraciju // kloniranje višedimenzionalnih nizova klase Test ( public static void main(String args) ( int intArray = ((1,2,3),(4,5)); int cloneArray = intArray. clone(); // će ispisati false System.out.println(intArray == cloneArray); // će ispisati true kada se napravi plitka kopija // tj. podnizovi se dijele System.out.println(intArray == cloneArray) ; System.out.println(intArray == cloneArray); ) )

    Najbolji članci na ovu temu