Susunan tatasusunan

S: Bagaimana saya menggunakan pelbagai tatasusunan?

J:

String s = String baru ("Hello, World"); // s adalah rujukan String, yang merujuk pada objek // String dengan nilai "Hello, World." s = String baru ("Tag Guten, Welt"); // Rujukan String yang sama sekarang merujuk // pada objek String yang berbeza; iaitu, // satu rujukan telah merujuk kepada dua // objek yang berbeza (berturut-turut). // (Perhatikan bahawa kita sekarang mempunyai objek String // dengan nilai "Hello, World", yang tidak memiliki // rujukan; oleh itu objek ini layak // untuk dikumpulkan sampah) String t; // t adalah rujukan String dengan nilai nol // (tidak merujuk kepada objek apa pun). // Sekiranya anda cuba menggunakan t pada ketika ini, misalnya dengan // mengatakan int len ​​= t.length; anda akan mendapat // NullPointerException (harus dipanggil // NullReferenceException). t = s;// Rujukan String t sekarang merujuk pada objek // yang sama yang disebut oleh rujukan String, // iaitu objek String dengan nilai "Guten Tag, Welt". // Jadi di sini kita mempunyai dua // rujukan ke satu objek (serentak).

Susunan di Java adalah objek dengan sendirinya, sama ada mengandungi primitif ( ints, chars, booleans, dan sebagainya) atau mengandungi objek lain. Ini bermaksud bahawa tatasusunan disebut seperti objek lain, dengan penambahan []semantik agregasi / penghapusan. Inilah contohnya:

Rentetan [] sa; // sa adalah rujukan nol // mencuba untuk mengakses panjang menyebabkan NullPointerException. sa = Rentetan baru [2]; // sa bukan lagi rujukan kosong, ia merujuk kepada objek // spesifik yang merupakan susunan dua rujukan String nol. // sa.length sekarang sama dengan 2 // (sa [0] dan sa [1] adalah dua rujukan String nol). sa [0] = "Helo, Dunia"; sa [1] = "Guten Tag, Welt"; // Sekarang sa merujuk kepada susunan dua rujukan String bukan nol. sa = Rentetan baru [1]; // sa.length sama dengan 1 // Rujukan yang sama sekarang merujuk kepada array yang berlainan // (dan lebih pendek). // sa [0] adalah rujukan String nol // cuba mengakses sa [1] menyebabkan // ArrayIndexOutOfBoundsException. sa [0] = "Helo, Dunia"; // sa [0] kini tidak kosong.

Soalan anda mengenai tatasusunan dapat dijawab dengan mempertimbangkannya

Rentetan [] [] saa; saa [0] [0] = "Bantuan";

akan menyebabkan NullPointerException, kerana saarujukan nol - iaitu, saatidak merujuk kepada objek apa pun. Untuk menetapkan nilai pada elemen pertama dari susunan pertama, saamesti merujuk kepada susunan dengan panjang lebih besar daripada sifar, dan saa[0]mesti merujuk kepada susunan rentetan bukan kosong yang panjangnya juga lebih besar daripada sifar. Oleh itu, seseorang boleh memulakan dengan mengatakan:

Rentetan [] [] saa; // saa adalah nol rujukan untuk array String array // Mencuba saa.length sudah menyebabkan NullPointerException, // seperti mencuba saa [0]. saa = Rentetan baru [1] []; // saa sekarang merujuk kepada susunan 1 rujukan nol pada String []. // saa. panjang sama dengan 1. // saa [0] adalah batal. saa [0] = Rentetan baru [2]; // saa sekarang merujuk kepada susunan 1 rujukan bukan nol // ke String [] panjang 2. // saa panjang masih sama dengan 1. // saa [0]. panjang sama dengan 2 (tetapi saa [0] [0] dan // saa [0] [1] kedua-duanya tidak sah). saa [0] [0] = "Helo, Dunia"; saa [0] [1] = "Guten Tag, Welt"; // Sekarang saa [0] [0] dan saa [0] [1] kedua-duanya tidak kosong.

Perhatikan bahawa anda tidak boleh merujuknya saa[0][0]hingga saa[0]tidak kosong, dan anda tidak boleh membuat bukan saa[0]kosong sehingga anda tidak menjadi saakosong. Pada asasnya, anda harus membina susunan tatasusunan anda secara bertahap.

Terdapat singkatan yang mudah digunakan untuk memulakan rujukan array:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // ini membuat objek String [] [] seperti yang dibuat // di atas, dan memberikan saa kepada rujuk ke objek itu. // Ruang kosong dimaksudkan untuk menekankan bahawa // objek yang dibuat adalah susunan satu String [] yang // mengandungi dua String. 

Dengan menggunakan singkatan ini, contoh kita dapat ditulis dengan betul sebagai:

Rentetan [] [] saa = {{{"Bantuan"}}}; 

Walau bagaimanapun, ini saamerujuk kepada susunan rentetan satu persatu. Perhatikan bahawa sintaks di atas hanya berfungsi semasa memulakan rujukan array (inisialisasi adalah kes khas penugasan pada saat pengisytiharan). Cara yang lebih umum untuk membuat susunan baru dan menetapkannya ke rujukan tatasusunan baru atau sedia ada kelihatan seperti ini (sekiranya terdapat rujukan yang ada):

saa = String baru [] [] {// perhatikan kosong [] [] - penyusun mengira ukuran // keluar (kosong [] [] diperlukan). {{"Hello"}, {"World"}} // ini adalah saa [0], // perhatikan koma yang memisahkan saa [0] dan saa [1] {{"Guten Tag"}, {"Welt"} } // ini adalah saa [1]}; // sekarang saa.length = 2, dan saa [0] dan saa [1] juga masing-masing mempunyai panjang 2
Random Walk Computing adalah butik perundingan Java / CORBA terbesar di New York, dengan fokus pada penyelesaian untuk syarikat kewangan. Dikenali dengan kepakaran Java terdepan, perunding Random Walk menerbitkan dan berbicara mengenai Java di beberapa forum yang paling dihormati di dunia.

Kisah ini, "Array of array" pada mulanya diterbitkan oleh JavaWorld.