Nesnelerin Dizisi Java
โก Akฤฑllฤฑ รzet
Nesnelerin Dizisi Java Nesne referanslarฤฑnฤฑ sabit boyutlu, bitiลik bir yuvada saklar; bu sayede tek bir deฤiลken bir sฤฑnฤฑfฤฑn birรงok รถrneฤini tutabilir ve yineleme, deฤiลtirme ve yรถntemlere geรงirme iรงin her birine bir dizin aracฤฑlฤฑฤฤฑyla eriลebilir.
Nesne dizisi nedir? Java?
A Java nesne dizisi Aynฤฑ sฤฑnฤฑfa ait birden fazla nesne รถrneฤini tek bir sabit boyutlu kapsayฤฑcฤฑda saklar. Deฤerleri saklayan ilkel bir dizinin aksine, int, doubleya da boolean Her bir yuvada doฤrudan bir nesne dizisi saklanฤฑr. referanslarHer bir yuva, bir nesnenin bellek konumunu gรถsterir ve nesnenin kendisi de bu yuvada bulunur. Java yฤฑฤฤฑn.
Bu dรผzen, herhangi bir nesnenin nasฤฑl gรถrรผneceฤine uyar. deฤiลken in Java ฤฐลe yarฤฑyor. Dizi, birden fazla nesne referansฤฑnฤฑ bir araya getirerek bunlara indeksle eriลmenizi saฤlar. Nesne sayฤฑsฤฑ รถnceden biliniyorsa ve programฤฑn รถmrรผ boyunca deฤiลmiyorsa, doฤal bir seรงimdir.
Sรถzdizimi
ClassName[] obj = new ClassName[array_length];
Saฤ taraf, ลu amaรงla alan ayฤฑrฤฑr: array_length referanslarฤฑn tรผmรผ, baลlangฤฑรง โโdeฤerleriyle iลaretlenmiลtir. nullHiรงbir nesne ClassName Henรผz mevcut deฤil, yalnฤฑzca bu nesnelere referans tutabilen bir kap var.
Nesnelerden oluลan bir dizi nasฤฑl oluลturulur? Java
Nesnelerden oluลan iลlevsel bir dizi oluลturmak her zaman iki tahsis adฤฑmฤฑ gerektirir. Birincisi referans kapsayฤฑcฤฑyฤฑ tahsis eder, ikincisi ise kapsayฤฑcฤฑnฤฑn iลaret edeceฤi her nesneyi tahsis eder. (Atla)ping ฤฐkinci adฤฑm, en yaygฤฑn kaynaktฤฑr. NullPointerException baลlangฤฑรง โโseviyesinde Java kodu.
) 1 Adฤฑm aรงฤฑk kod dรผzenleyici ve aลaฤฤฑdaki kodu kopyalayฤฑn:
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); } }
) 2 Adฤฑm Olarak dosyayฤฑ kaydedin ObjectArray.javaArdฤฑndan derleyip รงalฤฑลtฤฑrฤฑn.
) 3 Adฤฑm Hatayฤฑ not edin. 4. adฤฑma geรงmeden รถnce hatayฤฑ ayฤฑklamaya รงalฤฑลฤฑn.
) 4 Adฤฑm Hattฤฑ inceleyin Account obj[] = new Account[2];Bu, tรผrรผnde iki referans deฤiลkeninden oluลan bir dizi tahsis eder. Accountancak herhangi bir kaynak tahsis etmiyor. Account nesneler. Her iki yuva da nesneleri tutar. nullve arama obj[0].setData(...) Bir on null referans bir hata fฤฑrlatฤฑr NullPointerException iลlem esnasฤฑnda.
) 5 Adฤฑm 4. ve 5. satฤฑrlarฤฑn yorum satฤฑrlarฤฑnฤฑ kaldฤฑrฤฑn. Bu iki satฤฑr gerรงek bir deฤiลiklik yaratฤฑr. Account nesneleri atayฤฑn obj[0] hem de obj[1]Dizi artฤฑk gerรงek referanslar iรงeriyor ve kod sorunsuz รงalฤฑลฤฑyor.
รฤฑktฤฑ:
For Array Element 0 Value of a = 1 Value of b = 2 For Array Element 1 Value of a = 3 Value of b = 4
Nesne Dizisini Nasฤฑl Baลlatฤฑrฤฑm? Java
Yukarฤฑda gรถsterilen setter tabanlฤฑ baลlatmanฤฑn รถtesinde, nesne dizisi รผรง daha temiz ลekilde baลlatฤฑlabilir. Her stil, ayrฤฑntฤฑlฤฑ anlatฤฑm yerine netliฤi tercih eder, bu nedenle duruma en uygun olanฤฑ seรงin.
- Dรถngรผ baลlatma โ Diziyi ayฤฑrฤฑn, ardฤฑndan her bir indeksi tek tek inceleyin ve yeni bir nesne atayฤฑn. Bu, bรผyรผk diziler veya nesne sayฤฑsฤฑnฤฑn dinamik olduฤu durumlarda standart bir yรถntemdir.
- Yapฤฑcฤฑ baลlatma โ Oluลturma sฤฑrasฤฑnda deฤerleri doฤrudan kurucuya iletin, bรถylece ayrฤฑ bir setter รงaฤrฤฑsฤฑna gerek kalmaz.
- Dizi sabiti baลlatma โ Tek bir ifade iรงinde tanฤฑmlama ve doldurma iลlemi, satฤฑr iรงi kod kullanฤฑlarak gerรงekleลtirilir.
{ ... }Kรผรงรผk sabit kรผmeler iรงin ideal baลlatฤฑcฤฑ.
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); } }
Dรถngรผ baลlatma, boล yuva kalmamasฤฑnฤฑ garanti ettiฤi iรงin en gรผvenli varsayฤฑlan yรถntemdir. nullYapฤฑcฤฑ fonksiyon baลlatma, her nesnenin farklฤฑ argรผmanlara ihtiyaรง duyduฤu durumlarda amacฤฑ aรงฤฑkรงa belirtir ve dizi deฤiลmezleri kรผรงรผk รถrnek kodlarฤฑ kompakt tutar. Bir nedeniniz yoksa aynฤฑ dizi iรงinde farklฤฑ stilleri karฤฑลtฤฑrmayฤฑn: tutarlฤฑlฤฑk hatalarฤฑn tespitini kolaylaลtฤฑrฤฑr.
Bir nesnedeki รถฤelere yineleme ve eriลim Java Nesne Dizisi
Nesnelerden oluลan bir dizi oluลturulduktan sonra, รผรง yรถntem neredeyse tรผm eriลim ihtiyaรงlarฤฑnฤฑ karลฤฑlar. Kodun dizin รผzerinde ne kadar kontrole ihtiyaรง duyduฤuna uygun dรถngรผ stilini seรงin.
Klasik - Classic for dรถngรผ Bu, รถฤeleri deฤiลtirmek, komลularฤฑ karลฤฑlaลtฤฑrmak veya bir alt aralฤฑฤฤฑ yinelemek iรงin yararlฤฑ olan dizine eriลim saฤlar.
for (int i = 0; i < obj.length; i++) { System.out.println("Element " + i); obj[i].showData(); }
geliลtirilmiล for dรถngรผ (โfor-eachโ dรถngรผsรผ), indeksi gizler ve indeks gerekmediฤinde daha doฤal bir okuma saฤlar:
for (Account acc : obj) {
acc.showData();
}
Akarsular (Java 8 ve sonrasฤฑ) Diziyi, filtreleme ve eลleme iรงin kullanฤฑลlฤฑ olan bir iลlem hattฤฑna dรถnรผลtรผrรผn.pingveya dรถngรผ yazmadan toplama iลlemi:
import java.util.Arrays;
Arrays.stream(obj)
.filter(acc -> acc.a > 0)
.forEach(Account::showData);
Tek bir รถฤeyi okumak veya gรผncellemek iรงin doฤrudan indeks eriลimini kullanฤฑn, รถrneฤin obj[1].setData(10, 20)รncelikle uzunluฤunu mutlaka kontrol edin. obj.length kaรงฤฑnmak ArrayIndexOutOfBoundsExceptionHerhangi bir yuva ลu ลekilde olabilirdi: nullEriลimi boล deฤer kontrolรผ veya baลka bir yรถntemle koruyun. Optional Programฤฑn รงรถkmesini รถnlemek iรงin รงalฤฑลmaya devam etmesini saฤlamak.
Nesne dizisi ile nesne listesi arasฤฑndaki fark Java
Nesnelerden oluลan dรผz bir dizi hฤฑzlฤฑ ve tahmin edilebilir olsa da, รงalฤฑลma zamanฤฑnda nesne sayฤฑsฤฑ deฤiลtiฤi anda sabit boyutu bir sฤฑnฤฑrlama haline gelir. Java'S Koleksiyonlar รงerรงevesi saฤlar ArrayList Dinamik alternatif olarak. Aลaฤฤฑdaki tablo, her seรงeneฤin ne zaman uygun olduฤunu vurgulamaktadฤฑr.
| รzellik | Nesne Dizisi | Nesnelerden oluลan ArrayList |
|---|---|---|
| Beden | Oluลturma aลamasฤฑnda dรผzeltildi. | Otomatik olarak bรผyรผr ve kรผรงรผlรผr. |
| Beyan | Account[] a = new Account[5]; | List<Account> list = new ArrayList<>(); |
| Eriลim รถฤesi | a[i] | list.get(i) |
| รฤe ekle | Oluลturulduktan sonra desteklenmiyor. | list.add(obj) |
| Tip gรผvenliฤi | Derleme zamanฤฑnda bildirimle tiplendirilmiลtir. | Derleme zamanฤฑnda uygulanan jenerikler |
| Performans | Az miktarda daha hฤฑzlฤฑ indekslenmiล okumalar | Amortize edilmiล O(1) ekle, eleman baลฤฑna bazฤฑ ek masraflar |
| Tercih edildiฤinde | Boyut biliniyor ve sabittir. | Boyut bilinmiyor veya รงalฤฑลma zamanฤฑnda deฤiลiyor. |
Bellek kullanฤฑmฤฑnฤฑn kฤฑsฤฑtlฤฑ olduฤu ve indekslemenin รถngรถrรผlebilir olduฤu durumlarda, รถrneฤin matris dรผzenlerinde veya performans aรงฤฑsฤฑndan kritik olan sฤฑcak yollarda, dizi kullanฤฑn. ArrayList รoฤu gรผnlรผk uygulama kodunda, yeniden tahsis yapmadan ekleme ve รงฤฑkarma yeteneฤi, eleman baลฤฑna kรผรงรผk ek yรผkten daha รถnemli olduฤu iรงin bu รถzellik tercih edilir.



