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.

  • ???? Referans depolama: Her bir yuva Java Nesne dizisi, nesnenin kendisini deฤŸil, nesneye bir referans tutar; tฤฑpkฤฑ herhangi bir nesne deฤŸiลŸkeni gibi. Java.
  • ๐Ÿงฑ ฤฐki aลŸamalฤฑ oluลŸturma: Diziyi `new ClassName[size]` ile ayฤฑrฤฑn, ardฤฑndan her bir nesneyi `new ClassName()` ile ayฤฑrฤฑn ve รผzerindeki yรถntemleri รงaฤŸฤฑrฤฑn.
  • โš ๏ธ NullPointerException: Her slot baลŸlangฤฑรงta null deฤŸerle baลŸlar. BaลŸlatฤฑlmamฤฑลŸ bir slot รผzerinde bir metot รงaฤŸฤฑrmak, รงalฤฑลŸma zamanฤฑnda NullPointerException hatasฤฑna neden olur.
  • ๐Ÿ” yineleme: Dizideki her nesneyi tek tek incelemek iรงin dizi uzunluฤŸuyla bir for dรถngรผsรผ veya geliลŸmiลŸ bir for dรถngรผsรผ kullanฤฑn.
  • ๐Ÿ“ Sabit boyut: Bir dizi, tahsis edildikten sonra bรผyรผyemez. Nesne sayฤฑsฤฑ รงalฤฑลŸma zamanฤฑnda deฤŸiลŸtiฤŸinde ArrayList kullanฤฑn.
  • ๐Ÿ—๏ธ Yapฤฑcฤฑ fonksiyonun baลŸlatฤฑlmasฤฑ: OluลŸturma sฤฑrasฤฑnda doฤŸrudan geรงirilen yapฤฑcฤฑ fonksiyonlar, sonradan yapฤฑlan ayarlayฤฑcฤฑ รงaฤŸrฤฑlarฤฑna kฤฑyasla daha kฤฑsa ve gรผvenli bir kurulum saฤŸlar.
  • ๐Ÿšš Yรถntem parametresi: Diziyi bir metoda iletmek, bir referans aktarฤฑmฤฑ anlamฤฑna gelir; bu nedenle metot iรงindeki deฤŸiลŸiklikler รงaฤŸฤฑran tarafรงa gรถrรผlebilir.

Nesnelerin Dizisi Java

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.

Java Nesne dizisi referans deฤŸiลŸkenleri

) 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.

Java Nesne dizisi dolduruldu

ร‡ฤฑ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.

  1. 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.
  2. 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.
  3. 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.

ร–zellikNesne DizisiNesnelerden oluลŸan ArrayList
BedenOluลŸturma aลŸamasฤฑnda dรผzeltildi.Otomatik olarak bรผyรผr ve kรผรงรผlรผr.
BeyanAccount[] a = new Account[5];List<Account> list = new ArrayList<>();
EriลŸim รถฤŸesia[i]list.get(i)
ร–ฤŸe ekleOluลŸturulduktan sonra desteklenmiyor.list.add(obj)
Tip gรผvenliฤŸiDerleme zamanฤฑnda bildirimle tiplendirilmiลŸtir.Derleme zamanฤฑnda uygulanan jenerikler
PerformansAz miktarda daha hฤฑzlฤฑ indekslenmiลŸ okumalarAmortize edilmiลŸ O(1) ekle, eleman baลŸฤฑna bazฤฑ ek masraflar
Tercih edildiฤŸindeBoyut 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.

SSS

Nesnelerden oluลŸan bir dizi Java Aynฤฑ sฤฑnฤฑfa ait รถrneklerin referanslarฤฑnฤฑ depolayan sabit boyutlu bir kapsayฤฑcฤฑdฤฑr. Her bir yuva, yฤฑฤŸฤฑndaki bir nesneye iลŸaret eder ve รถฤŸelere kรถลŸeli parantezler kullanฤฑlarak sฤฑfฤฑr tabanlฤฑ indeksle eriลŸilir.

ClassName[] arr = new ClassName[size] ลŸeklinde diziyi tanฤฑmlayฤฑn, ardฤฑndan her bir nesneyi bir dรถngรผ iรงinde veya satฤฑr iรงi dizi sabitiyle new ClassName() kullanarak oluลŸturun. Her iki adฤฑm da gereklidir; ilki yalnฤฑzca referans yuvalarฤฑ ayฤฑrฤฑr.

ร‡รผnkรผ `new ClassName[size]` yalnฤฑzca dizinin kendisini ayฤฑrฤฑr. Her yuva null olarak baลŸlar, bu nedenle o yuvada herhangi bir yรถntemi รงaฤŸฤฑrmak NullPointerException hatasฤฑ verir. Bunu dรผzeltmek iรงin, kullanmadan รถnce her dizine yeni bir `ClassName()` atayฤฑn.

Dizilerin boyutu oluลŸturulurken sabit olarak seรงilirken, ArrayList otomatik olarak bรผyรผr ve kรผรงรผlรผr. Diziler biraz daha hฤฑzlฤฑ indeksli okuma saฤŸlar; ArrayList ise gรผnlรผk uygulama kodlarฤฑ iรงin kullanฤฑลŸlฤฑ ekleme, kaldฤฑrma ve akฤฑลŸ yรถntemleri ekler.

ฤฐndeks gerektiฤŸinde arr.length ile klasik bir for dรถngรผsรผ kullanฤฑn veya basit yineleme iรงin geliลŸmiลŸ bir for-each dรถngรผsรผ kullanฤฑn. Filtreleme veya dรถnรผลŸtรผrme iรงin diziyi Arrays.stream(arr) ile sarmalayฤฑn ve ihtiyacฤฑnฤฑz olan iลŸlem hattฤฑnฤฑ zincirleyin.

Parametreyi ClassName[] name olarak tanฤฑmlayฤฑn, ardฤฑndan metodu dizi deฤŸiลŸkeniyle รงaฤŸฤฑrฤฑn. Java Bu yรถntem, dizi referansฤฑnฤฑ deฤŸer olarak iletir; bu nedenle, yรถntem iรงindeki eleman alanlarฤฑndaki deฤŸiลŸiklikler รงaฤŸฤฑran tarafฤฑndan gรถrรผlebilir.

Makine รถฤŸrenimi kod รผreteรงleri, iki aลŸamalฤฑ bellek tahsis modelini tanฤฑr ve yeni baลŸlayanlarฤฑn unuttuฤŸu eksik `new ClassName()` satฤฑrlarฤฑnฤฑ tamamlar. Ayrฤฑca, hedef koleksiyon boyutu bilinmediฤŸinde `ArrayList` รถnererek `NullPointerException` hatalarฤฑnฤฑ azaltฤฑrlar.

Evet. GitHub Copilot, etki alanฤฑ modelini aรงฤฑklayan bir yorumdan dizi bildirimleri, kurucu dรถngรผleri, yineleme bloklarฤฑ ve ArrayList dรถnรผลŸรผmleri oluลŸturur. RevOluลŸturulan kodu kullanmadan รถnce doฤŸru kurucu argรผmanlarฤฑ ve gรผvenli null iลŸleme iรงin inceleyin.

Bu yazฤฑyฤฑ ลŸu ลŸekilde รถzetleyin: