1. Susunan dalam ingatan

Dalam contoh sebelum ini, ilustrasi adalah sedikit tidak tepat.

Apabila mencipta tatasusunan (seperti semasa mencipta rentetan), dua blok memori berasingan diperuntukkan: satu untuk menyimpan tatasusunan ( bekas) itu sendiri dan blok kedua untuk pembolehubah yang menyimpan alamatnya . Gambar di bawah mewakili penjelasan ini:

Tatasusunan dalam ingatan

Memori yang diperuntukkan untuk tatasusunan 10 intelemen dan int[]pembolehubah yang menyimpan alamat tatasusunan int, ditunjukkan dalam warna hijau.

Sebagai perbandingan, pembolehubah biasa intyang menyimpan nilai 199ditunjukkan dalam warna biru.

Ini sedikit mengingatkan anda menyimpan rentetan dalam ingatan, bukan?

Betul, rentetan. Dan sama seperti apabila anda bekerja dengan rentetan, anda boleh menetapkan pembolehubah tatasusunan kepada satu sama lain:

Kod Penjelasan
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Buat tatasusunan 10 intelemen.
Berikan nilai 4kepada sel dengan indeks 2.
Berikan nilai 9kepada sel dengan indeks 7.
Dalam bpembolehubah, simpan alamat yang disimpan dalam apembolehubah.
Sekarang adan btuding ke objek tatasusunan yang sama dalam ingatan.
Dalam sel objek tatasusunan dengan index 9, tulis jumlah nilai yang disimpan dalam sel 2(yang menyimpan nilai 4) dan 7(yang menyimpan nilai 9).

Objek tatasusunan kekal di tempatnya dan apembolehubah bdan menyimpan alamat (rujukan) yang sama kepada objek yang sama. Tengok gambar:

Tatasusunan dalam ingatan 2

2. Butiran lanjut tentang bekerja dengan tatasusunan

Anda boleh mencipta pelbagai elemen dalam apa jua jenis. Untuk melakukan ini, hanya tulis kurungan segi empat sama selepas nama jenis. Secara umum, membuat tatasusunan kelihatan seperti ini:

type[] name = new type[number];

Di mana jenis ialah jenis elemen yang akan kami simpan dalam tatasusunan. Nama ialah nama pembolehubah yang akan kami gunakan untuk merujuk kepada tatasusunan, dan nombor ialah bilangan sel dalam tatasusunan.

Contoh di atas ialah bentuk kanonik untuk mencipta pembolehubah tatasusunan dan objek tatasusunan. Pada hakikatnya, ini adalah dua entiti yang berasingan.

Anda boleh membuat pembolehubah tatasusunan secara berasingan daripada objek tatasusunan:

type[] name;
name = new type[number];

Dan satu lagi perkara yang tidak penting:

Anda boleh menggunakan pembolehubah atau bahkan keseluruhan ungkapan sebagai tatasusunan indeks dan bilangan elemen tatasusunan .

Contoh:

Kod Penjelasan
int n = 100;
int[] a = new int[n];
Buat tatasusunan nelemen
int n = 100;
int[] a = new int[n * 2 + 3];
Buat tatasusunan dengan 203elemen
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Penting:
Dengan cara ini, anda harus sedar bahawa jika anda cuba mengakses sel tatasusunan menggunakan indeks yang tidak wujud untuk tatasusunan (dalam contoh kami, ini bermakna sebarang integer tidak dalam julat ), maka program akan ranap 0..99dengan ArrayIndexOfBoundException, bermakna bahawa indeks berada di luar sempadan tatasusunan.

3. Panjang tatasusunan

Seperti yang anda lihat dalam contoh sebelumnya, anda boleh mencipta pembolehubah tatasusunan dengan sendirinya dan kemudian memberikan nilai (rujukan kepada objek tatasusunan) kepadanya di suatu tempat dalam kod. Anda juga boleh melakukan ini:

Kod Penjelasan
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Buat pembolehubah tatasusunan yang jenisnya int[]
Jika apembolehubah itu kurang daripada 10,
kemudian buat tatasusunan 10elemen.
Jika tidak,
buat pelbagai 20elemen

Dan sekarang apa lagi yang boleh anda lakukan dengan tatasusunan sedemikian? Bagaimana anda tahu berapa banyak unsur di dalamnya?

Untuk membantu dengan ini, tatasusunan mempunyai sifat khas (pembolehubah) bernama length. Anda boleh mencari panjang tatasusunan menggunakan ungkapan ini:

array.length;

Berikut arrayialah nama pembolehubah tatasusunan dan lengthnama harta tatasusunan. Nilai lengthharta itu tidak boleh diubah: lengthharta itu sendiri boleh diberikan kepada pembolehubah lain, tetapi tiada apa yang boleh diberikan kepadanya (jika anda cuba melakukan ini, program itu tidak akan disusun).

Kita boleh meneruskan dengan contoh sebelumnya seperti ini:

Kod Penjelasan
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Buat pembolehubah tatasusunan yang jenisnya int[]
Jika apembolehubah itu kurang daripada 10,
kemudian buat tatasusunan 10elemen.
Jika tidak,
buat tatasusunan 20elemen
Gelung ke atas semua elemen tatasusunan: dari 0ke panjangarray.length - 1

4. Ringkasan fakta tentang tatasusunan di Jawa

Mari kita imbas semula perkara yang kita tahu tentang tatasusunan:

Fakta 1. Tatasusunan terdiri daripada banyak sel.

Fakta 2. Anda mengakses sel tertentu dengan menggunakan nombornya (indeks).

Fakta 3. Semua sel adalah daripada jenis yang sama.

Fakta 4. Nilai awal semua sel ialah 0 (jika sel menyimpan nombor), null(jika sel menyimpan rujukan objek), atau false(jika sel menyimpan booleannilai). Anda akan mengetahui lebih lanjut tentang nilai lalai dalam bab ini .

Fakta 5. String[] list hanyalah pengisytiharan pembolehubah. Ini tidak mencipta bekas (objek tatasusunan) itu sendiri. Untuk menggunakan pembolehubah, anda perlu membuat tatasusunan (bekas) dahulu dan menetapkannya kepada pembolehubah. Lihat contoh di bawah.

Fakta 6. Apabila kita mencipta objek tatasusunan (bekas), kita mesti menunjukkan berapa besarnya, iaitu berapa banyak sel yang terkandung di dalamnya. Ini dilakukan dengan pernyataan seperti: new TypeName[n];

Fakta 7. Panjang tatasusunan boleh didapati menggunakan .lengthharta tersebut.

Fakta 8. Selepas mencipta tatasusunan, anda tidak boleh menukar jenis elemennya atau bilangan elemen yang disimpannya.

Kod Penjelasan
String s;
String[] list;
sialah null
listadalahnull
list = new String[10];
int n = list.length;
Pembolehubah listmenyimpan rujukan kepada objek: tatasusunan rentetan yang terdiri daripada 10elemen.
nialah10
list = new String[0];

Sekarang listmerujuk kepada pelbagai 0elemen. Tatasusunan wujud, tetapi ia tidak boleh menyimpan sebarang unsur.

list = null;
System.out.println(list[1]);
Pengecualian (ralat program) akan dilemparkan, iaitu program akan ranap. listmenyimpan rujukan kepadanull
list = new String[10];
System.out.println(list[10]);
Pengecualian tatasusunan di luar sempadan (ralat program) akan dihasilkan.
Jika sesuatu listmenyimpan 10elemen/sel, maka indeks yang sah ialah: 0 1 2 3 4 5 6 7 8 910elemen.