JavaRush /Blog Java /Random-MS /Sesuatu tentang tatasusunan di Jawa

Sesuatu tentang tatasusunan di Jawa

Diterbitkan dalam kumpulan
hello! Sebelum ini, semasa latihan, kami bekerja dengan objek tunggal (atau jenis primitif). Tetapi bagaimana jika kita perlu bekerja bukan dengan satu objek, tetapi dengan keseluruhan kumpulan? Sebagai contoh, kami ingin membuat senarai hari lahir semua pekerja dalam syarikat kami. Ia sepatutnya mengandungi, katakan, 30 baris dalam format: "Andrey Petrov, 25 Januari." Struktur data khas, tatasusunan, akan membantu kami di sini. Jika anda membandingkan tatasusunan dengan objek dari kehidupan sebenar, strukturnya sangat serupa dengan peti besi bank dengan sel: Sesuatu tentang tatasusunan dalam Java - 1Tatasusunan juga terdiri daripada sel. Anda boleh meletakkan sesuatu dalam setiap sel. Dalam kes ini, untuk mengakses kandungan anda perlu mengetahui nombor sel. Tatasusunan dibuat seperti ini:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
Di sini kami telah mencipta susunan 10 sel. Anda boleh segera memberi perhatian kepada beberapa ciri tatasusunan:
  1. Ia menyimpan data jenis yang ditetapkan dengan ketat. Jika kita mula-mula mencipta tatasusunan rentetan String, kita tidak akan dapat menyimpan apa-apa lagi di dalamnya. Jenis data ditentukan semasa membuat tatasusunan. Inilah yang membezakannya daripada peti simpanan selamat, di mana pelanggan boleh menyimpan apa sahaja yang dia mahu.
  2. Tatasusunan boleh menyimpan data jenis primitif (contohnya, int), rentetan ( String), atau objek kelas yang sama. Lebih tepat lagi, bukan objek itu sendiri, tetapi pautan ke objek ini.
  3. Saiz tatasusunan mesti dinyatakan semasa penciptaan. Anda tidak akan dapat menentukannya kemudian atau mengubah saiznya selepas dibuat.
Java menunjukkan bahawa tatasusunan sedang dibuat dengan menggunakan kurungan segi empat sama []pada kedua-dua belah ungkapan. Mereka boleh ditentukan sebelum nama pembolehubah rujukan atau selepas - ia akan berfungsi dengan cara sama ada:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Jika anda ingin menulis sesuatu pada tatasusunan, anda perlu menentukan bilangan sel di mana nilai akan ditulis. Nombor sel tatasusunan bermula pada 0. Bermula dari sifar adalah amalan biasa dalam pengaturcaraan. Lebih cepat anda membiasakannya, lebih baik :) Sesuatu tentang tatasusunan dalam Java - 2Iaitu, jika anda ingin meletakkan beberapa nilai dalam sel pertama array , ia dilakukan seperti ini:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Kini sel pertama tatasusunan kami, yang mengandungi hari lahir rakan sekerja, mengandungi rentetan dengan hari lahir Lena. Dengan analogi, anda boleh menambah nilai lain:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
Sila ambil perhatian: kami menambah hari lahir Olesya ke sel kelapan (adakah anda terlupa mengapa sel No. 7 ialah sel kelapan?). Walaupun semua sel lain tidak diisi. Tidak perlu menulis nilai ke dalam tatasusunan mengikut urutan - tidak ada sekatan sedemikian. Sebaliknya, jika anda menulis mengikut urutan, lebih mudah untuk menjejaki bilangan sel yang kosong dan diduduki, dan tidak akan ada "lubang" yang tersisa dalam tatasusunan. Jika anda ingin mendapatkan kandungan sel tatasusunan, seperti dalam kes sel bank, anda perlu mengetahui nombornya. Ini dilakukan seperti ini:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
Output konsol:

Олеся Остапенко, 3 января
Kami mencipta pembolehubah Stringdan memberitahu pengkompil: "Cari sel dengan indeks 7 dalam tatasusunan birthdaysdan tetapkan nilai yang disimpan di sana kepada pembolehubah String olesyaBirthday." Itulah yang dia lakukan.

Panjang tatasusunan Java

Apabila bekerja dengan tatasusunan, anda boleh mengetahui panjangnya dengan mudah menggunakan sifat khas - length.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Output konsol:

10
Catatan:Harta ini lengthmenyimpan saiz tatasusunan, bukan bilangan sel yang diisi. Tatasusunan kami hanya menyimpan 3 nilai, tetapi apabila kami menciptanya, kami menetapkan saiz = 10 untuknya. Ini ialah nilai yang dipulangkan oleh medan length. Mengapa ini mungkin berguna? Nah, sebagai contoh, jika anda ingin mencetak senarai semua hari lahir ke konsol (untuk memastikan tiada siapa yang terlupa), anda boleh melakukan ini dalam satu gelung mudah:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Dalam gelung kita mencipta pembolehubah iyang pada mulanya sama dengan sifar. Pada setiap pas, kami mengambil sel dengan indeks i daripada tatasusunan kami dan mencetak nilainya ke konsol. Gelung akan membuat 10 lelaran, dan nilai i akan meningkat daripada 0 hingga 9 - hanya mengikut indeks sel tatasusunan kami! Dengan cara ini kita akan mencetak semua nilai dari birthdays[0]hingga ke konsol birthdays[9] . Malah, terdapat cara untuk mencipta tatasusunan secara berbeza. Sebagai contoh, susunan nombor intboleh dibuat seperti ini:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Kaedah ini dipanggil "pemulaan pantas". Ia agak mudah kerana kami segera mencipta tatasusunan dan mengisinya dengan nilai. Tidak perlu menyatakan secara eksplisit saiz tatasusunan - medan lengthakan diisi secara automatik semasa permulaan pantas.
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

Tatasusunan Objek Java

Anda telah pun mendengar bahawa tatasusunan objek dan tatasusunan primitif disimpan dalam memori secara berbeza. Mari kita ambil, sebagai contoh, tatasusunan tiga objek Cat:
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("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
Terdapat beberapa perkara yang perlu difahami di sini:
  1. Dalam kes primitif, tatasusunan Java menyimpan banyak nilai tertentu (seperti nombor int). Dalam kes objek, tatasusunan menyimpan banyak rujukan. Tatasusunan catsterdiri daripada tiga sel, setiap satunya mengandungi rujukan kepada objek Cat. Setiap pautan menunjuk ke alamat dalam memori di mana objek itu disimpan.
  2. Elemen tatasusunan disimpan dalam ingatan dalam satu blok. Ini dilakukan untuk akses yang lebih cekap dan cepat kepada mereka. Oleh itu, pautan catsmenghala ke blok dalam ingatan di mana semua objek - elemen tatasusunan - disimpan. A cats[0]- ke alamat tertentu dalam blok ini.
Sesuatu tentang tatasusunan dalam Java - 3Adalah penting untuk memahami bahawa tatasusunan bukan sahaja boleh menyimpan objek, ia sendiri adalah objek.

Tatasusunan tatasusunan atau tatasusunan dua dimensi

Berdasarkan ini, kita berhadapan dengan soalan - bolehkah kita mencipta, sebagai contoh, bukan tatasusunan rentetan atau nombor, tetapi tatasusunan tatasusunan? Dan jawapannya ialah - ya, kita boleh! Tatasusunan boleh menyimpan sebarang objek di dalamnya, termasuk tatasusunan lain. Tatasusunan sedemikian akan dipanggil dua dimensi. Jika anda menggambarkannya dalam gambar, ia akan kelihatan sangat serupa dengan jadual biasa. Sebagai contoh, kami ingin mencipta tatasusunan yang akan menyimpan 3 tatasusunan nombor intdengan 10 sel setiap satu. Ia akan kelihatan seperti ini: Sesuatu tentang tatasusunan dalam Java - 4Setiap baris mewakili tatasusunan nombor int. Tatasusunan pertama mengandungi nombor dari 1 hingga 10, yang kedua - dari -1 hingga -10, yang ketiga - satu set nombor rawak. Setiap tatasusunan ini disimpan dalam sel tatasusunan dua dimensi kami. Memulakan tatasusunan dua dimensi dalam kod kelihatan seperti ini:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Tatasusunan kucing dua dimensi kami menyimpan 3 tatasusunan 5 sel setiap satu. Jika kita ingin meletakkan objek kita dalam sel ketiga tatasusunan kedua, kita melakukannya seperti ini:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]menunjuk ke tatasusunan kedua, dan [2]menunjuk ke sel ketiga tatasusunan ini. Memandangkan tatasusunan dua dimensi terdiri daripada beberapa tatasusunan, untuk melintasinya dan mencetak semua nilai ke konsol (atau mengisi semua sel), kita memerlukan gelung bersarang berganda:
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
Dalam gelung luar (pembolehubah i), kami bergilir-gilir melintasi semua tatasusunan yang membentuk tatasusunan dua dimensi kami. Dalam gelung dalaman (pembolehubah j) kita melelar melalui semua sel setiap tatasusunan. Akibatnya, objek cats[0][0](tatasusunan pertama, sel pertama) akan dipaparkan pertama pada konsol, dan objek kedua akan menjadi cats[0][1](tatasusunan pertama, sel kedua). Apabila tatasusunan pertama habis, , cats[1][0], cats[1][1]dan cats[1][2]seterusnya akan dikeluarkan. Dengan cara ini, permulaan pantas juga tersedia untuk tatasusunan dua dimensi:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Biasanya, kami akan menulis tatasusunan dua dimensi numberssebagai int[3][3], tetapi kaedah ini membolehkan kami menentukan nilai dengan segera. Mengapakah tatasusunan dua dimensi diperlukan? Contohnya, dengan bantuannya, anda boleh mencipta semula permainan terkenal "Battleship" dengan mudah: Sesuatu tentang tatasusunan dalam Java - 5Struktur medan permainan dalam "Battleship" adalah sedemikian rupa sehingga ia boleh digambarkan dengan mudah: susunan dua dimensi 10 tatasusunan, 10 sel setiap satu. . Anda mencipta dua tatasusunan sedemikian - untuk diri sendiri dan lawan anda:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Anda mengisi dengan beberapa nilai (contohnya, nombor atau tanda *) sel di mana kapal anda berada, dan kemudian anda dan lawan anda bergilir-gilir memanggil nombor sel:
  • seaBattle[6][5]!
  • lalu! seaBattle2[6][6]!
  • tercedera!
  • seaBattle2[6][7]!
  • tercedera!
  • seaBattle2[6][8]!,
  • Dibunuh!

Sumber tambahan tentang tatasusunan

Ingin mengetahui lebih lanjut tentang tatasusunan? Sila lihat artikel di bawah. Terdapat banyak maklumat menarik dan berguna mengenai topik ini.
  1. Tatasusunan dalam Java - artikel terperinci tentang tatasusunan, penciptaan, permulaan dan penggunaannya. Dengan contoh.
  2. Kelas Arrays dan penggunaannya - artikel menerangkan beberapa kaedah kelasArray
  3. Arrays ialah kuliah JavaRush pertama yang didedikasikan untuk tatasusunan.
  4. Tatasusunan multidimensi - artikel terperinci tentang tatasusunan multidimensi dengan contoh.
  5. Kembalikan tatasusunan sifar panjang, bukan nol - Pengarang Pengaturcaraan Berkesan Joshua Bloch bercakap tentang cara untuk mengembalikan tatasusunan kosong dengan lebih baik.
Ini menyimpulkan perkenalan pertama kami dengan tatasusunan, tetapi ini hanya permulaan interaksi dengan mereka. Dalam kuliah berikut, kita akan melihat cara yang menarik untuk menggunakannya, dan juga mengetahui fungsi terbina dalam Java untuk bekerja dengan lebih mudah dengan struktur data ini :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION