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. JavaKoleksiyonlar çerçevesi şunları 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.



