Hai! Sebelumnya dalam pelatihan Anda, kami telah bekerja dengan objek tunggal (dan tipe primitif). Tapi bagaimana jika kita perlu bekerja dengan seluruh kelompok objek, bukan hanya satu? Misalnya, kita ingin membuat daftar ulang tahun semua karyawan di perusahaan kita. Itu harus berisi 30 string yang diformat sebagai berikut: "Sarah Huffman, 25 Januari" Kami akan mendapat manfaat dari struktur data khusus yang disebut array . Jika kita membandingkan larik dengan objek nyata, ini sangat mirip dengan lemari besi bank dengan brankas:
Sebuah larik juga terdiri dari "kotak". Anda dapat memasukkan sesuatu (elemen) ke dalam setiap kotak. Untuk mengakses suatu elemen, Anda perlu mengetahui nomor kotaknya (indeks). Ini adalah bagaimana sebuah array dibuat:
Artinya, jika Anda ingin memberi nilai pada kotak pertama , lakukan ini:
Penting untuk dipahami bahwa array tidak hanya menyimpan objek: ia adalah objek itu sendiri. Hal ini membawa kita pada pertanyaan apakah kita dapat membuat tidak hanya array string atau angka, tetapi juga array array . Dan jawabannya adalah ya, kita bisa! Array dapat menyimpan objek apapun, termasuk array lainnya. Array seperti itu disebut dua dimensi . Jika kita merepresentasikannya secara visual, itu akan sangat mirip dengan tabel biasa. Misalkan, kita ingin membuat sebuah array dari 3 array yang masing-masing dapat menyimpan 10
Setiap baris mewakili sebuah
Di loop luar (variabel
Di "Battleship", struktur lapangan permainan dapat dijelaskan dengan mudah: array dua dimensi dari 10 array dengan masing-masing 10 elemen. Anda membuat dua susunan ini (satu untuk Anda dan satu untuk lawan Anda)

public class Main {
public static void main(String[] args) {
String [] birthdays = new String[10];
}
}
Di sini kita membuat array yang menampung 10 elemen. Anda dapat segera mencatat beberapa fitur dari array:
- Ini menyimpan elemen dari tipe data yang terdefinisi dengan baik . Jika kita membuat array String, kita tidak dapat menyimpan apa pun di dalamnya. Tipe data ditentukan saat array dibuat . Di sinilah perbedaannya dengan brankas (di mana pelanggan dapat menyimpan apa yang dia inginkan).
- Ukurannya harus ditentukan saat array dibuat . Anda tidak dapat menunjukkannya nanti atau mengubah ukurannya setelah larik dibuat .
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Jika Anda ingin menulis sesuatu ke dalam array, Anda perlu menentukan indeks kotak tempat nilai akan ditulis. Kotak-kotak dalam array diberi nomor mulai dari 0. Menghitung mulai dari nol adalah praktik yang sangat umum dalam pemrograman. Semakin cepat Anda terbiasa, semakin baik :) 
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Jana Russell, March 12";
}
}
Sekarang ulang tahun Jana disimpan di sel pertama susunan ulang tahun karyawan kami: Anda dapat menambahkan nilai lain dengan cara yang sama:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Jana Russell, March 12";
birthdays[1] = "Landon Chan, May 18";
birthdays[7] = "Rosie Mills, January 3";
}
}
Perhatikan bahwa kami menambahkan ulang tahun Rosie ke kotak kedelapan (Anda belum lupa mengapa Kotak No. 7 adalah kotak kedelapan, bukan?) . Anda dapat melihat bahwa kami belum mengisi semua sel lainnya. Kami tidak harus menulis nilai ke dalam array secara berurutan. Tidak ada persyaratan seperti itu. Tentu saja, menulis elemen secara berurutan membuatnya lebih mudah untuk melacak berapa banyak kotak yang kosong dan berapa banyak yang ditempati, dan ini mencegah array memiliki "lubang". Jika Anda ingin mendapatkan isi salah satu kotak, maka (seperti halnya brankas) Anda perlu mengetahui nomornya. Begini caranya:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Jana Russell, March 12";
birthdays[1] = "Landon Chan, May 18";
birthdays[7] = "Rosie Mills, January 3";
String rosieBirthday = birthdays[7];
System.out.println(rosieBirthday);
}
}
Keluaran konsol: Rosie Mills, 3 Januari Kami membuat String
variabel dan memberi tahu kompiler: "Temukan kotak dengan indeks 7 di larik ulang tahun , dan tetapkan nilai yang terkandung di sana ke variabel String
rosieBirthday " . Dan itulah yang dilakukannya. Saat bekerja dengan array, kita dapat dengan mudah menemukan panjangnya menggunakan properti khusus: length .
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Jana Russell, March 12";
birthdays[1] = "Landon Chan, May 18";
birthdays[7] = "Rosie Mills, January 3";
int birthdaysLength = birthdays.length;
System.out.println(birthdaysLength);
}
}
Keluaran konsol: 10 Catatan: length
Properti menyimpan ukuran larik, bukan jumlah kotak yang penuh. Array kami hanya menyimpan 3 nilai, tetapi kami menunjukkan ukurannya sebagai 10 saat kami membuatnya. Dan inilah nilai yang length
dikembalikan oleh bidang tersebut. Mengapa ini berguna? Nah, misalkan Anda ingin menampilkan daftar semua ulang tahun (untuk memverifikasi bahwa tidak ada yang dilupakan). Anda dapat melakukan ini dalam satu putaran sederhana:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Jana Russell, March 12";
birthdays[1] = "Landon Chan, May 18";
birthdays[2] = "Jeremiah Leonard, July 12";
birthdays [3] = "Kenny Russo, September 7";
birthdays[4] = "Tommie Barnes, November 9";
birthdays [5] = "Roman Baranov, August 14";
birthdays [6] = "Chanice Andersen, April 1";
birthdays[7] = "Rosie Mills, January 3";
birthdays [8] = "Keenan West, October 19";
birthdays [9] = "Abraham McArthur, May 3";
for (int i = 0; i < birthdays.length; i++) {
System.out.println(birthdays[i]);
}
}
}
Dalam loop, kami mendeklarasikan variabel i
, yang diinisialisasi ke nol. Di setiap lintasan, kami mendapatkan elemen dengan indeks i dari larik kami dan menampilkan nilainya. Loop akan melakukan 10 iterasi, dan i akan meningkat dari 0 menjadi 9—dan angka adalah indeks dari elemen array kita! Hasilnya, kami akan menampilkan semua nilai dari birthdays[0] hingga birthdays[9] Sebenarnya, ada cara lain untuk membuat array. Misalnya, Anda dapat membuat larik int
s seperti ini:
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
}
}
Teknik ini disebut "inisialisasi pintasan". Ini cukup nyaman, karena kami secara bersamaan membuat array dan mengisinya dengan nilai. Kita tidak perlu menentukan ukuran array secara eksplisit: dengan inisialisasi pintasan, bidang length
diatur secara otomatis.
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
System.out.println(numbers.length);
}
}
Output konsol: 9 Sekarang, sedikit tentang bagaimana array disimpan dalam memori. Katakanlah kita memiliki larik tiga Cat
objek:
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat[] cats = new Cat[3];
cats[0] = new Cat("Thomas");
cats[1] = new Cat("Behemoth");
cats[2] = new Cat("Lionel Messi");
}
}
Anda perlu memahami beberapa hal di sini:
-
Dalam kasus primitif, sebuah array menyimpan satu set nilai tertentu (misalnya
int
s). Dalam kasus objek, array menyimpan sekumpulan referensi .
Arraycats
terdiri dari tiga elemen, yang masing-masing merupakan referensi keCat
objek. Setiap referensi menunjuk ke alamat memori tempat objek yang sesuai disimpan. - Elemen array disusun dalam satu blok di memori. Ini dilakukan agar mereka dapat diakses dengan cepat dan efisien.
cats
mereferensikan blok memori tempat semua objek (elemen array) disimpan. Cats[0]
referensi alamat tertentu dalam blok ini. 
int
detik. Ini akan terlihat seperti ini:

int
array. Larik pertama berisi angka dari 1 hingga 10, larik kedua — dari -1 hingga -10, dan larik ketiga — sekumpulan angka acak. Masing-masing array ini disimpan dalam kotak array dua dimensi kita. Dalam kode, inisialisasi array dua dimensi terlihat seperti ini:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
}
Kucing larik dua dimensi kami menyimpan 3 larik dengan 5 kotak di setiap larik. Jika kita ingin meletakkan objek di kotak ketiga dari array kedua, kita akan melakukan ini:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
cats[1][2] = new Cat("Fluffy");
}
[1]
menunjukkan larik kedua, dan [2]
menunjukkan kotak ketiga dari larik itu. Karena array dua dimensi terdiri dari beberapa array, untuk melakukan iterasi melaluinya dan menampilkan semua nilainya (atau mengisi semua elemennya), kita memerlukan loop bersarang:
for (int i = 0; i < cats.length; i++) {
for (int j = 0; j < cats[i].length; j++) {
System.out.println(cats[i][j]);
}
}
i
), kami mengulangi semua larik dalam larik dua dimensi kami. Di loop dalam (variabel j
), kami melewati semua elemen dari setiap larik. Akibatnya, cat[0][0] (array pertama, elemen pertama) akan ditampilkan terlebih dahulu, diikuti oleh cat[0][1] (array pertama, elemen kedua). Setelah kita melewati larik pertama, kita akan menampilkan cat[1][0] , cat[1][1] , cat[1][2] , dll. Omong-omong, larik dua dimensi juga mendukung inisialisasi singkat:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Biasanya, kita akan mendeklarasikan array dua dimensi numbers
sebagai int[3][3]
, tetapi singkatan ini memungkinkan kita menentukan nilainya dengan segera. Mengapa Anda membutuhkan array dua dimensi? Nah, Anda bisa menggunakan satu untuk dengan mudah membuat ulang game "Battleship" yang terkenal: 
int battleshipBoard1 = new int[10][10];
int battleshipBoard2 = new int[10][10];
gunakan beberapa nilai (misalnya angka atau simbol) untuk mengisi elemen yang sesuai dengan lokasi kapal Anda, lalu bergiliran memanggil koordinat untuk elemen tertentu:
- kapal perangBoard1[0][2]!
- Merindukan! battleshipBoard2[2][4]!
- Memukul!
- battleshipBoard2[2][5]!
- Memukul!
- kapal perangBoard2[2][6]!,
- Tenggelam!
GO TO FULL VERSION