CodeGym/Blog Java/rawak/Kelas koleksi di Jawa
John Squirrels
Tahap
San Francisco

Kelas koleksi di Jawa

Diterbitkan dalam kumpulan
Hai! Dalam beberapa pelajaran yang lalu, kami telah mencapai kemajuan yang besar dalam penguasaan kami ArrayList. Walau bagaimanapun, setakat ini kami hanya melakukan operasi yang paling mudah: alih keluar, masukkan dan paparkan. Sudah tentu, ini tidak merangkumi senarai penuh tugas yang mesti dilakukan oleh pembangun apabila bekerja dengan ArrayList. Ingat pelajaran tentang tatasusunan dan Arrayskelas? Pencipta Java secara khusus mereka bentuk kelas ini untuk mengendalikan tugas paling biasa yang dihadapi pengaturcara apabila bekerja dengan tatasusunan. Dan bagaimana pulaArrayList? Sudah tentu, terdapat beberapa senarai tugas biasa yang perlu dilakukan dengannya. Adakah semuanya telah dilaksanakan dalam kelas tertentu, atau adakah kita perlu menulis pelaksanaan kita sendiri setiap kali? Sudah tentu, anda tidak perlu menulis semuanya sendiri. Operasi paling biasa yang melibatkan koleksi telah pun dilaksanakan dalam Collectionskelas statik khas. Kelas koleksi - 1 Di Jawa, sekumpulan struktur data biasanya dirujuk sebagai koleksi . Data boleh disimpan dalam pelbagai cara. Setakat ini, kami hanya mengkaji ArrayListkelas, di mana data disimpan dalam tatasusunan. Nanti kita berkenalan dengan koleksi lain. Buat masa ini, cukup sekadar memahami bahawa Collectionskelas itu direka bentuk untuk berfungsi bukan sahajaArrayList, tetapi juga dengan jenis koleksi lain (oleh itu, namanya). Jadi, apakah tugas yang Collectionssebenarnya dibantu oleh kelas semasa bekerja ArrayList? Yang pertama dan paling jelas ialah pengisihan. Dalam pelajaran tentang tatasusunan, kami mempertimbangkan contoh dengan nombor. Sekarang kita akan mempertimbangkan contoh dengan rentetan. Kelas Collectionsmelaksanakan sort()kaedah untuk mengisih kandungan koleksi:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
Output: [Bumi, Musytari, Marikh, Utarid, Neptun, Zuhal, Uranus, Zuhrah] Rentetan disusun mengikut abjad! Tetapi mengapa mengikut abjad? Kelas Stringsebenarnya melaksanakan logik yang mengawal cara rentetan dibandingkan (yang kebetulan mengikut abjad). Untuk kelas yang anda cipta sendiri, anda boleh melaksanakan logik perbandingan anda sendiri, tetapi kami akan membincangkan perkara ini dalam pelajaran lain. Kelas ini Collectionsjuga membantu anda mencari elemen minimum dan maksimum dalam ArrayList. Ini dilakukan menggunakan kaedah min()dan max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
Output: 7 1 Sememangnya, ini adalah jauh lebih mudah daripada menulis kod secara manual untuk lelaran ke atas semua elemen dan mencari elemen terbesar/terkecil :) Kaedah lain yang sangat berguna ialah reverse(). Jika kita terpaksa "membalikkan" senarai supaya elemen pergi dalam susunan yang bertentangan, bagaimana kita akan melakukannya? Ia mungkin tidak begitu mudah untuk menulis algoritma sedemikian sendiri :) Nasib baik, reverse()kaedah itu sudah tahu bagaimana. Katakan kami tidak menyukai fakta bahawa sort()kaedah itu mengisih planet kami mengikut abjad, dan kami ingin membalikkan susunannya: dari Z ke A:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
Output: [Venus, Uranus, Zuhal, Neptune, Mercury, Marikh, Musytari, Bumi] Kami telah banyak bercakap tentang pengasingan, susunan unsur, dll. Tetapi bagaimana jika kita mempunyai objektif yang bertentangan? Sebagai contoh, katakan kita cuba melaksanakan permainan bingo. Kami menambah 100 nombor ke dram. Ia sepatutnya muncul pada skrin satu demi satu. Pemain pertama yang memotong semua nombor pada tiketnya menang. Ini mudah dilaksanakan menggunakan shuffle()kaedah:
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> bingoDrum = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(bingoDrum.get(i));
       }

   }
}
Output: Perhatian anda, sila! Berikut adalah 10 nombor pertama dari dram! 32 61 4 81 25 8 66 35 42 71 Semudah itu! Masalahnya diselesaikan, dan bahagian permainan kita ditulis :) Sekarang mari kita bayangkan situasi yang berbeza. Sebelum ini, kami mencipta solarSystemsenarai yang mengandungi planet. Dan ia nampaknya sesuai dengan kami dalam setiap cara kecuali satu: anda boleh memadamkan item daripadanya dan menambah yang baharu ! Ini jelas bukan tingkah laku yang kami jangkakan: Sistem suria sepatutnya tidak boleh diubah dalam program kami. Kelas Collectionsmempunyai kaedah yang sangat menarik: unmodifiableList(). Ia mencipta senarai tidak berubah daripada senarai yang diluluskan sebagai hujah. Anda tidak boleh menambah atau memadam item daripada senarai ini. Apabila berurusan dengan senarai planet dalam sistem suria, inilah yang kita mahukan!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
Output: Pengecualian dalam benang "utama" java.lang.UnsupportedOperationException di java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) di Main.main(Main.java:21) Ini ialah ralat: anda tidak boleh tambah apa-apa ke solarSystem! Satu-satunya perkara yang perlu anda perhatikan di sini ialah hakikat bahawa kaedah ini kembali List<>(bukan ArrayList<>), kerana jenis ini adalah perkara biasa untuk semua jenis senarai. Satu lagi situasi yang agak biasa yang boleh berlaku dengan mudah ialah pengaturcara menambah elemen dalam susunan yang salah. Jika ini berlaku dan kami mendapati Mercury dan Neptun bercampur, kami boleh membetulkan kesilapan ini menggunakan swap()kaedah:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
Kami menyerahkan kepada swap()kaedah senarai kami dan indeks dua elemen yang perlu ditukar. Ambil perhatian bahawa kaedah ini berfungsi dengan indeks, bukan rujukan. Jadi, di sini kami terpaksa menggunakan ArrayList.indexOf()kaedah tersebut. Output: [Neptune, Zuhrah, Bumi, Marikh, Musytari, Zuhal, Uranus, Utarid] [Utarid, Zuhrah, Bumi, Marikh, Musytari, Zuhal, Uranus, Neptun] Akhirnya, kita akan berkenalan dengan kaedah yang sangat menarik: disjoint(). Ia menyemak sama ada dua koleksi bersilang, iaitu, sama ada mereka mempunyai sekurang-kurangnya satu elemen yang sama . Jika mereka tidak melakukannya, ia kembali benar. Ia mereka lakukan, maka ia kembali palsu
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
Seperti yang anda lihat, kedua-dua senarai kami mempunyai elemen yang sama sekali berbeza, jadi program mengeluarkan true . Ini adalah kelas yang menarik dan sangat berguna. Seperti Arrays, ia melakukan banyak rutin, kerja yang membosankan untuk kita, membiarkan kita menumpukan pada perkara lain.
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi