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

Koleksi di Jawa | Koleksi Jawa

Dipublikasikan di grup Random-ID
Halo! Selama beberapa pelajaran terakhir, kami telah membuat kemajuan besar dalam menguasai ArrayList. Namun, selama ini kami hanya melakukan operasi paling sederhana: menghapus, menyisipkan, mengeluarkan ke konsol. Tentu saja, ini bukanlah akhir dari daftar masalah yang dihadapi pengembang saat menggunakan ArrayList . Ingat kuliah tentang array dan kelas Array ? Ini dikembangkan oleh pencipta Java secara khusus untuk memecahkan masalah umum yang dihadapi programmer saat bekerja dengan array. Bagaimana dengan ArrayList ? Tentunya ada beberapa daftar tugas khas untuknya juga. Apakah semuanya diimplementasikan di kelas terpisah, atau apakah kita harus menulis perilaku yang diinginkan secara manual setiap saat? Tentu saja, Anda tidak perlu menulis semuanya sendiri. Operasi paling umum yang dilakukan saat menggunakan koleksi di Java telah diimplementasikan di kelas statis khusus Koleksi. Koleksi Kelas - 1

Koleksi di Jawa

“Koleksi” adalah nama umum untuk beberapa struktur data di Java. Data dapat disimpan dengan berbagai cara. Sejauh ini kita hanya mempelajari kelas ArrayList , dimana data disimpan dalam sebuah array. Nanti kita akan berkenalan dengan koleksi lainnya. Sekarang cukup dipahami bahwa kelas Collections dirancang untuk bekerja tidak hanya dengan ArrayList, tetapi juga dengan jenis koleksi lain di Java (sesuai dengan namanya). Jadi, tugas apa yang dapat diselesaikan oleh kelas Collections saat bekerja dengan ArrayList? Yang pertama dan paling jelas adalah penyortiran. Dalam kuliah tentang array, kita melihat contoh dengan angka, dan sekarang mari kita lihat contoh dengan string. Untuk mengurutkan isi koleksi, kelas Collections mengimplementasikan metode 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-garisnya telah diurutkan berdasarkan abjad! Mengapa diurutkan berdasarkan abjad? Kelas Stringdiprogram untuk menentukan dengan tepat bagaimana string dibandingkan satu sama lain (tepatnya berdasarkan abjad). Untuk kelas yang akan Anda buat sendiri, Anda dapat menerapkan mekanisme perbandingan Anda sendiri, namun hal ini akan kita bicarakan pada kuliah lainnya. Selain itu, kelas Koleksi memungkinkan Anda menemukan elemen minimum dan maksimum dalam file ArrayList. Ini dilakukan dengan menggunakan metode min()and 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
Tentu saja, ini jauh lebih nyaman daripada menulis kode secara manual untuk menelusuri semua elemen dan mencari elemen terbesar/terkecil :) Metode lain yang sangat berguna adalah reverse(). Jika kita perlu “membalikkan” sebuah daftar sehingga elemen-elemennya berada dalam urutan terbalik, bagaimana kita melakukannya? Mungkin tidak mudah untuk menulis algoritma seperti itu sendiri :) Untungnya, metode ini reverse()sudah mengetahui cara melakukan ini. Misalnya, kita tidak menyukai cara metode ini sort()mengurutkan planet kita berdasarkan abjad, dan kita ingin mengubah urutannya menjadi 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:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
Omong-omong, di sini kita sering berbicara tentang pengurutan, urutan elemen, dll. Bagaimana jika tugas kita justru sebaliknya? Misalnya, kami mencoba menerapkan mekanisme lotere. Kami telah menambahkan 100 nomor ke gulungan, yang akan muncul di layar satu per satu. Peserta pertama yang mencoret semua nomor pada tiketnya menang. Sangat mudah untuk mengimplementasikan mekanisme seperti ini dengan menggunakan metode 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
Sesederhana itu! Masalahnya terpecahkan, dan bagian permainan kita telah ditulis :) Sekarang mari kita bayangkan situasi yang berbeda. Sebelumnya, kami membuat daftar solarSystemdengan planet-planet yang tercantum di dalamnya. Dan sepertinya ini cocok untuk kita semua, jika bukan karena satu hal: Anda dapat menghapus elemen darinya dan menambahkan yang baru! Ini jelas bukan perilaku yang kita harapkan: tata surya dalam program kita seharusnya tidak berubah. Kelas Koleksi memiliki metode yang sangat menarik - unmodifiableList(). Ini menciptakan versi yang tidak dapat diubah dari daftar yang diberikan. Tidak mungkin menambah atau menghapus elemen ke dalamnya. Dalam hal daftar planet di tata surya, inilah yang kita butuhkan!
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)
Kesalahan: solarSystemSekarang Anda tidak dapat menambahkan apa pun! Satu-satunya hal yang perlu Anda perhatikan dalam hal ini adalah tipe variabelnya harus List<>, dan bukan ArrayList<>(metode ini mengembalikan objek dengan tipe ini, umum untuk semua tipe daftar). Situasi umum lainnya yang dapat terjadi selama bekerja adalah pemrogram menambahkan elemen dalam urutan yang salah. Jika ini terjadi, dan Merkurius dan Neptunus tiba-tiba berpindah tempat, metode berikut akan membantu kita memperbaiki kesalahan 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 meneruskan daftar kami ke metode swap(), serta indeks dari dua elemen yang perlu ditukar. Harap diperhatikan: metode ini bekerja secara khusus dengan indeks, dan bukan dengan tautan. Oleh karena itu, disini kami membutuhkan sebuah metode ArrayList.indexOf(). Kesimpulan:

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

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
Terakhir, mari berkenalan dengan metode yang sangat menarik - disjoint(). Ia memeriksa apakah dua koleksi memiliki perpotongan, yaitu setidaknya satu elemen identik. Jika tidak, kembali 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 daftar kami sangat berbeda, sehingga program menghasilkan true. Ini adalah kelas yang menarik dan sangat bermanfaat. Misalnya Arrays, dia melakukan banyak pekerjaan rutin dan kasar untuk kita, sehingga memungkinkan kita fokus pada hal lain. Baca tentangnya di dokumentasi Oracle , ada metode lain di sana.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION