CodeGym /Java Blog /Acak /Sesuatu tentang array
John Squirrels
Level 41
San Francisco

Sesuatu tentang array

Dipublikasikan di grup Acak
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: Sesuatu tentang array - 1Sebuah 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:

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

  2. Ukurannya harus ditentukan saat array dibuat . Anda tidak dapat menunjukkannya nanti atau mengubah ukurannya setelah larik dibuat .
Fakta bahwa kita membuat array ditunjukkan dengan tanda kurung siku di kedua sisi ekspresi. Mereka dapat ditentukan sebelum atau sesudah nama variabel referensi. Cara mana pun akan berhasil:

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 :) Sesuatu tentang array - 2 Artinya, jika Anda ingin memberi nilai pada kotak pertama , lakukan ini:

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 Stringvariabel dan memberi tahu kompiler: "Temukan kotak dengan indeks 7 di larik ulang tahun , dan tetapkan nilai yang terkandung di sana ke variabel StringrosieBirthday " . 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: lengthProperti 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 lengthdikembalikan 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 ints 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 lengthdiatur 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 Catobjek:

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:
  1. Dalam kasus primitif, sebuah array menyimpan satu set nilai tertentu (misalnya ints). Dalam kasus objek, array menyimpan sekumpulan referensi .
    Array catsterdiri dari tiga elemen, yang masing-masing merupakan referensi ke Catobjek. Setiap referensi menunjuk ke alamat memori tempat objek yang sesuai disimpan.

  2. Elemen array disusun dalam satu blok di memori. Ini dilakukan agar mereka dapat diakses dengan cepat dan efisien.
Jadi, catsmereferensikan blok memori tempat semua objek (elemen array) disimpan. Cats[0]referensi alamat tertentu dalam blok ini. Sesuatu tentang array - 3 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 intdetik. Ini akan terlihat seperti ini:
Sesuatu tentang array - 4
Setiap baris mewakili sebuah intarray. 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]);
   }
}
Di loop luar (variabel 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 numberssebagai 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: Sesuatu tentang array - 5 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)

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!
Ini menyimpulkan pengenalan pertama kita tentang array, tetapi ini hanyalah awal dari interaksi kita dengannya. Dalam pelajaran berikut, kita akan melihat cara-cara menarik untuk menggunakannya, dan juga mempelajari fungsi bawaan apa yang dimiliki Java agar kita dapat bekerja dengan struktur data ini dengan lebih nyaman :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION