JavaRush /Blog Java /Random-MS /Koleksi di Jawa | Koleksi Java

Koleksi di Jawa | Koleksi Java

Diterbitkan dalam kumpulan
hello! Sepanjang beberapa pelajaran yang lalu, kami telah mencapai kemajuan yang besar dalam menguasai ArrayList. Walau bagaimanapun, pada masa ini kami hanya melakukan operasi yang paling mudah: memadam, memasukkan, mengeluarkan ke konsol. Sudah tentu, ini bukan penamat senarai masalah yang dihadapi oleh pembangun apabila menggunakan ArrayList . Ingat kuliah tentang tatasusunan dan kelas Tatasusunan ? Ia dibangunkan oleh pencipta Java secara khusus untuk menyelesaikan masalah biasa yang dihadapi oleh pengaturcara semasa bekerja dengan tatasusunan. Bagaimana pula dengan ArrayList ? Pasti ada beberapa senarai tugas biasa untuknya juga. Adakah semuanya dilaksanakan dalam beberapa kelas yang berasingan, atau adakah kita perlu menulis tingkah laku yang diingini secara manual setiap kali? Sudah tentu, anda tidak perlu menulis semuanya sendiri. Operasi paling biasa yang dilakukan apabila menggunakan koleksi dalam Java telah pun dilaksanakan dalam Koleksi kelas statik khas. Koleksi Kelas - 1

Koleksi di Jawa

"Koleksi" ialah nama generik untuk beberapa struktur data di Jawa. Data boleh disimpan dalam pelbagai cara. Setakat ini kami hanya mempelajari ArrayList class , di mana data disimpan dalam tatasusunan. Kita akan berkenalan dengan koleksi yang lain nanti. Sekarang sudah cukup untuk memahami bahawa kelas Koleksi direka untuk berfungsi bukan sahaja dengan ArrayList, tetapi juga dengan jenis koleksi lain di Jawa (oleh itu, sebenarnya, namanya). Jadi, apakah tugas yang dibenarkan oleh kelas Collections untuk anda selesaikan apabila bekerja dengan ArrayList? Yang pertama dan paling jelas ialah pengisihan. Dalam kuliah tentang tatasusunan, kita melihat contoh dengan nombor, dan sekarang mari kita lihat contoh dengan rentetan. Untuk mengisih kandungan koleksi, kelas Koleksi melaksanakan kaedah berikut sort():
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);

   }
}
Kesimpulan:

[Венера, Земля, Марс, Меркурий, Нептун, Сатурн, Уран, Юпитер]
Garis telah disusun mengikut abjad! Mengapa mengikut susunan abjad? Kelas Stringdiprogramkan untuk menentukan dengan tepat bagaimana rentetan dibandingkan antara satu sama lain (tepat mengikut abjad). Untuk kelas yang akan anda buat sendiri, anda boleh melaksanakan mekanisme perbandingan anda sendiri, tetapi kami akan membincangkannya dalam kuliah lain. Selain itu, kelas Koleksi membolehkan 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));

}
Kesimpulan:

7
1
Ini, sudah tentu, adalah lebih mudah daripada menulis kod secara manual untuk melalui semua elemen dan mencari elemen terbesar/terkecil :) Kaedah lain yang sangat berguna ialah reverse(). Jika kita perlu "terbalikkan" senarai supaya unsur-unsur berada dalam susunan terbalik, bagaimanakah kita akan melakukannya? Ia mungkin tidak begitu mudah untuk menulis sendiri algoritma sedemikian :) Nasib baik, kaedah itu reverse()sudah tahu bagaimana untuk melakukan ini. Sebagai contoh, kami tidak menyukai cara kaedah sort()mengisih planet kami dalam susunan abjad, dan kami ingin menukar susunan kepada terbalik - 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);

   }
}
Kesimpulan:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
Ngomong-ngomong, di sini kita sering bercakap tentang pengisihan, susunan elemen, dll. Bagaimana jika tugas kita adalah sebaliknya? Sebagai contoh, kami cuba melaksanakan mekanisme loteri. Kami telah menambah 100 nombor pada gelendong, yang sepatutnya muncul pada skrin satu demi satu. Peserta pertama yang memotong semua nombor pada tiket mereka menang. Sangat mudah untuk melaksanakan mekanisme sedemikian menggunakan kaedah shuffle():
public class Main {

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

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

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

       Collections.shuffle(lottery);//mix
       System.out.println("Attention! The first 10 numbers appear from the drum!");
       for (int i = 0; i < 10; i++) {

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

   }
}
Kesimpulan:

Внимание! Из барабана появляются первые 10 чисел!
32
61
4
81
25
8
66
35
42
71
Semudah itu! Masalahnya telah diselesaikan, dan sekeping permainan kami ditulis :) Sekarang mari kita bayangkan situasi yang berbeza. Sebelum ini, kami membuat senarai solarSystemdengan planet yang disenaraikan di dalamnya. Dan ia nampaknya sesuai untuk kita semua, jika bukan untuk satu perkara: anda boleh mengalih keluar elemen daripadanya dan menambah yang baharu! Ini jelas bukan tingkah laku yang kami jangkakan: sistem suria dalam program kami sepatutnya berada dalam keadaan tidak berubah. Kelas Collections mempunyai kaedah yang sangat menarik - unmodifiableList(). Ia mencipta versi tidak berubah bagi senarai yang diberikan. Adalah mustahil untuk menambah atau mengalih keluar elemen padanya. Dalam kes senarai planet sistem suria, inilah yang kita perlukan!
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
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
	at Main.main(Main.java:21)
Ralat: solarSystemSekarang anda tidak boleh menambah apa-apa! Satu-satunya perkara yang perlu anda perhatikan dalam kes ini ialah jenis pembolehubah mestilah List<>, dan bukan ArrayList<>(kaedah ini mengembalikan objek jenis ini, biasa kepada semua jenis senarai). Satu lagi situasi biasa yang boleh berlaku semasa kerja ialah pengaturcara menambah elemen dalam susunan yang salah. Jika ini berlaku, dan Mercury dan Neptun bertukar tempat secara tidak dijangka, kaedah berikut akan membantu kami membetulkan kesilapan ini swap():
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));// wrong planet order
       System.out.println(solarSystem);

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

   }
}
Kami menyerahkan senarai kami kepada kaedah swap(), serta indeks dua elemen yang perlu ditukar. Sila ambil perhatian: kaedah ini berfungsi secara khusus dengan indeks, dan bukan dengan pautan. Oleh itu, di sini kami memerlukan kaedah ArrayList.indexOf(). Kesimpulan:

[Нептун, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Меркурий]

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
Akhir kata, mari kita berkenalan dengan kaedah yang sangat menarik - disjoint(). Ia menyemak sama ada dua koleksi mempunyai persimpangan, iaitu, sekurang-kurangnya satu elemen yang sama. Jika tidak, pulangkan true, jika ya, kembali false.
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, elemen dalam dua senarai kami adalah berbeza sama sekali, jadi program mengeluarkan true. Ini adalah kelas yang menarik dan sangat berguna. Seperti Arrays, dia melakukan banyak rutin, kerja kasar untuk kita, membolehkan kita memberi tumpuan kepada perkara lain. Baca mengenainya dalam dokumentasi Oracle , terdapat kaedah lain di sana.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION