Niz objekata u Java
โก Pametni saลพetak
Niz objekata u Java pohranjuje reference objekata u susjedni utor fiksne veliฤine, omoguฤujuฤi jednoj varijabli da sadrลพi viลกe instanci klase i pristupa svakoj od njih putem indeksa za iteraciju, mutaciju i prosljeฤivanje metodama.
ล to je niz objekata u Java?
A Java niz objekata pohranjuje viลกe instanci objekata iste klase u jednom spremniku fiksne veliฤine. Za razliku od primitivnog niza koji pohranjuje vrijednosti kao ลกto su int, double, ili boolean izravno u svakom utoru pohranjuje se niz objekata referenceSvaki slot pokazuje na memorijsku lokaciju objekta, a sam objekt se nalazi na Java hrpa.
Ovaj raspored odgovara naฤinu na koji bilo koji objekt varijabla in Java radi. Niz jednostavno grupira nekoliko referenci objekata zajedno tako da im moลพete pristupiti putem indeksa. To je prirodan izbor kada je broj objekata unaprijed poznat i ne mijenja se tijekom ลพivotnog vijeka programa.
Sintaksa
ClassName[] obj = new ClassName[array_length];
Desna strana dodjeljuje prostor za array_length reference, sve inicijalizirane na nullNema predmeta ClassName joลก postoji, samo kontejner koji moลพe sadrลพavati reference na takve objekte.
Kako stvoriti niz objekata u Java
Stvaranje radnog niza objekata uvijek traje dva koraka alokacije. Prvi alocira referentni kontejner, a drugi alocira svaki objekt na koji ฤe kontejner pokazivati. Preskoฤiping Drugi korak je najฤeลกฤi izvor NullPointerException kod poฤetnika Java kodirati.
Korak 1) Otvorite svoj ureฤivaฤ koda i kopirajte sljedeฤi kod:
class ObjectArray { public static void main(String args[]) { Account obj[] = new Account[2]; // obj[0] = new Account(); // obj[1] = new Account(); obj[0].setData(1, 2); obj[1].setData(3, 4); System.out.println("For Array Element 0"); obj[0].showData(); System.out.println("For Array Element 1"); obj[1].showData(); } } class Account { int a; int b; public void setData(int c, int d) { a = c; b = d; } public void showData() { System.out.println("Value of a = " + a); System.out.println("Value of b = " + b); } }
Korak 2) Spremite datoteku kao ObjectArray.java, a zatim ga kompajlirajte i pokrenite.
Korak 3) Zabiljeลพite greลกku. Pokuลกajte je otkloniti prije nego ลกto nastavite na korak 4.
Korak 4) Pregledajte liniju Account obj[] = new Account[2];Dodjeljuje niz od dvije referentne varijable tipa Account, ali ne dodjeljuje nijedan Account predmete. Oba utora drลพe nulli pozivanje obj[0].setData(...) na null referenca baca NullPointerException za vrijeme izvoฤenja.
Korak 5) Odkomentirajte retke 4 i 5. Ova dva retka stvaraju stvarne Account objekte i dodijeliti im obj[0] i obj[1]Niz sada sadrลพi stvarne reference i kod se izvodi ฤisto.
Izlaz:
For Array Element 0 Value of a = 1 Value of b = 2 For Array Element 1 Value of a = 3 Value of b = 4
Kako inicijalizirati niz objekata u Java
Osim inicijalizacije temeljene na postavljaฤima prikazane gore, niz objekata moลพe se inicijalizirati na tri ฤiลกฤa naฤina. Svaki stil ลพrtvuje opลกirnost za jasnoฤu, stoga odaberite onaj koji najbolje odgovara situaciji.
- Inicijalizacija petlje โ dodijeliti niz, zatim proฤi kroz svaki indeks i dodijeliti novi objekt. Ovo je standardni obrazac za velike nizove ili kada je broj objekata dinamiฤan.
- Inicijalizacija konstruktora โ proslijedite vrijednosti izravno konstruktoru u trenutku kreiranja tako da nije potreban zaseban poziv settera.
- Inicijalizacija literala polja โ deklarirati i popuniti u jednoj naredbi s inline
{ ... }inicijalizator, idealan za male fiksne skupove.
class Account { int a, b; public Account(int a, int b) { // constructor this.a = a; this.b = b; } } public class InitDemo { public static void main(String[] args) { // 1) Loop initialisation Account[] loopArr = new Account[3]; for (int i = 0; i < loopArr.length; i++) { loopArr[i] = new Account(i, i * 10); } // 2) Constructor initialisation, one slot at a time Account[] ctorArr = new Account[2]; ctorArr[0] = new Account(1, 2); ctorArr[1] = new Account(3, 4); // 3) Array literal initialisation Account[] litArr = { new Account(5, 6), new Account(7, 8), new Account(9, 10) }; System.out.println("loop size = " + loopArr.length); System.out.println("ctor size = " + ctorArr.length); System.out.println("literal size= " + litArr.length); } }
Inicijalizacija petlje je najsigurnija zadana postavka jer jamฤi da nema preostalog utora. nullInicijalizacija konstruktora ฤini namjeru eksplicitnom kada svaki objekt treba razliฤite argumente, a literali polja odrลพavaju mali demo kod kompaktnim. Nemojte mijeลกati stilove unutar istog polja osim ako nemate razlog: dosljednost olakลกava uoฤavanje greลกaka.
Iteriranje i pristup elementima u Java Niz objekata
Nakon ลกto se niz objekata popuni, tri obrasca pokrivaju gotovo svaku potrebu pristupa. Odaberite stil petlje koji odgovara koliฤini kontrole koju kod treba nad indeksom.
klasik for petlja daje pristup indeksu, ลกto je korisno za zamjenu elemenata, usporedbu susjednih elemenata ili iteraciju podraspona.
for (int i = 0; i < obj.length; i++) { System.out.println("Element " + i); obj[i].showData(); }
Poboljลกana for petlja (petlja โfor-eachโ) skriva indeks i ฤita se prirodnije kada indeks nije potreban:
for (Account acc : obj) {
acc.showData();
}
Streamovi (Java 8 i kasnije) pretvoriti niz u cjevovod, ลกto je praktiฤno za filtriranje, mapiranjeping, ili agregiranje bez pisanja petlje:
import java.util.Arrays;
Arrays.stream(obj)
.filter(acc -> acc.a > 0)
.forEach(Account::showData);
Za ฤitanje ili aลพuriranje jednog elementa koristite izravni pristup indeksu, na primjer obj[1].setData(10, 20)Uvijek prvo provjerite duljinu s obj.length Izbjeฤi ArrayIndexOutOfBoundsExceptionKada bilo koji utor moลพe biti null, zaลกtitite pristup provjerom null vrijednosti ili Optional kako bi program nastavio raditi umjesto da se sruลกi.
Niz objekata u odnosu na ArrayList objekata u Java
Obiฤan niz objekata je brz i predvidljiv, ali njegova fiksna veliฤina postaje ograniฤenje ฤim se broj objekata promijeni tijekom izvoฤenja. Java'S Okvir za zbirke osigurava ArrayList kao dinamiฤka alternativa. Tablica u nastavku istiฤe kada je svaki izbor prikladan.
| svojstvo | Niz objekata | NizPopisObjekata |
|---|---|---|
| Veliฤina | Fiksirano prilikom kreiranja | Automatski raste i smanjuje se |
| izjava | Account[] a = new Account[5]; | List<Account> list = new ArrayList<>(); |
| Element pristupa | a[i] | list.get(i) |
| Dodaj element | Nije podrลพano nakon kreiranja | list.add(obj) |
| Vrsta sigurnosti | Tipizirano deklaracijom za vrijeme kompajliranja | Generiฤki tipovi se primjenjuju tijekom kompajliranja |
| Izvoฤenje | Marginalno brลพe indeksirano ฤitanje | Amortizirani O(1) dodatak, neki reลพijski troลกkovi po elementu |
| Poลพeljno kada | Veliฤina je poznata i fiksna | Veliฤina je nepoznata ili se mijenja tijekom izvoฤenja |
Koristite niz kada je ograniฤen memorijski otisak i predvidljivo indeksiranje vaลพni, na primjer u matriฤnim rasporedima ili vruฤim putovima kritiฤnim za performanse. Posegnite za ArrayList u veฤini svakodnevnog aplikacijskog koda, jer moguฤnost dodavanja i uklanjanja bez realokacije nadmaลกuje mali optereฤenje po elementu.



