Di sini kita membahas penyortiran daftar, set, dan peta, termasuk penyortiran berdasarkan nilai peta.
1) Sebutkan penyortiran
Daftar penyortiran dapat secara langsung menggunakan metode pengumpulan koleksi, atau metode sortir array. Dalam analisis akhir, koleksi akan memanggil metode sortir array.
public static <T> void sort (Daftar <T> Daftar, Komparator <? Super t> c) {objek [] a = list.toArray (); Arrays.sort (a, (pembanding) c); ListIterator i = list.listIterator (); untuk (int j = 0; j <a.length; j ++) {i.next (); i.set (a [j]); }}Jika ini adalah objek khusus, Anda perlu mengimplementasikan antarmuka yang sebanding sehingga objek itu sendiri memiliki fungsi "membandingkan". Tentu saja, kami juga dapat menggunakan pembanding secara eksternal untuk menentukan penyortirannya.
Misalnya:
paket com.fox; /** * @author huangfox * @desc */kelas publik mengimplementasikan yang sebanding <user> {name string pribadi; usia int pribadi; pengguna publik () {} pengguna publik (nama string, int usia) {super (); this.name = name; this.age = usia; } @Override public string toString () {return "name:" + name + ", usia:" + usia; } public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } @Override public int compareTo (user o) {if (o.age <this.age) return 1; lain jika (o.age> this.age) return -1; lain kembali 0; } / ** * @param args * / public static void main (string [] args) {user u1 = pengguna baru ("fox", 11); Pengguna u2 = pengguna baru ("Fox2", 21); System.out.println (u2.compareto (U1)); }}Sortir dengan:
// Daftar <User> us = new ArrayList <User> (); Daftar <User> us = new LinkedList <User> (); us.add (pengguna baru ("f5", 12)); us.add (pengguna baru ("f2", 22)); us.add (pengguna baru ("f3", 2)); us.add (pengguna baru ("f4", 14)); us.add (pengguna baru ("f5", 32)); us.add (pengguna baru ("f4", 12)); us.add (pengguna baru ("f7", 17)); us.add (pengguna baru ("f8", 52)); System.out.println (US.ToString ()); long bt = system.nanoTime (); Collections.sort (AS, pembanding baru <User> () {@Override Public int Compare (User O1, User O2) {if (o1.getage () <o2.getage ()) return -1; else if (o1.getage ()> o2.getage ()) return 1; else o1.getName (). O2.geto ()) return 1; else o1.getname (). Compareto (o2.geto ()) return 1; else o1.getName (). O2.geto (o2.get) (ELSE o1.getName (). CompareTo (o2.geto () ()}}} o (o1. long et = system.nanoTime (); System.out.println (et - bt); System.out.println (US.ToString ());Tentu saja, di sini Anda dapat secara langsung mengumpulkan dan mengurutkan (kami). Pembanding digunakan untuk mengoptimalkan metode perbandingan pengguna sendiri (menyortir orang pada usia yang sama sesuai dengan nama pengguna dan string penyortiran).
Untuk menyebutkan secara sederhana, penyortiran array menggunakan penyortiran penyisipan dan menggabungkan penyortiran, dan penyisipan penyisipan langsung ketika panjang array kecil.
2) Setel
Set termasuk Hashset dan Treeset. Hashset didasarkan pada HashMap dan Treeset didasarkan pada TreeMap.
TreeMap diimplementasikan menggunakan pohon merah dan hitam, dan secara alami memiliki fungsi penyortiran. "Secara alami memiliki fungsi penyortiran" berarti memiliki iterator dalam menaikkan dan menurun.
Jadi bagaimana Anda mengurutkan hashset? Kami dapat mengonversi hashset ke daftar dan mengurutkannya dengan daftar.
Misalnya:
Atur <User> us = new HashSet <User> (); // atur <user> us = TreeSet baru <User> (); // Atur <user> us = TreeSet baru <User> (pembanding baru <User> () {// // @override // public int bandar o1.getName (). compareTo (o2.getname ()); us.add (pengguna baru ("f5", 12)); us.add (pengguna baru ("f2", 22)); us.add (pengguna baru ("f3", 2)); us.add (pengguna baru ("f4", 14)); us.add (pengguna baru ("f5", 32)); us.add (pengguna baru ("f4", 12)); us.add (pengguna baru ("f7", 17)); us.add (pengguna baru ("f8", 52)); // Set -> Daftar Array <User> Daftar = ArrayList baru <User> (US); System.out.println (daftar); Collections.sort (daftar); System.out.println (daftar);Anda juga dapat mengubah hashset menjadi array dan mengurutkannya dengan array.
3) Peta penyortiran
Peta termasuk Hashmap dan TreeMap. Seperti disebutkan di atas, TreeMap diimplementasikan dengan pohon merah dan hitam dan secara alami memiliki fungsi penyortiran.
Jadi bagaimana Anda mengurutkan hashmap menjadi "kunci"? Metode ini sangat sederhana, gunakan hashmap untuk membangun treemap.
Peta <string, integer> us = new HashMap <string, integer> (); // peta <string, integer> us = new treemap <string, integer> (); us.put ("f1", 12); us.put ("f2", 13); us.put ("f5", 22); us.put ("f4", 42); us.put ("f3", 15); us.put ("f8", 21); us.put ("f6", 123); us.put ("f7", 1); us.put ("f9", 19); System.out.println (US.ToString ()); System.out.println (treemap baru <string, integer> (us));Bagaimana cara menyortir dengan "nilai"?
// urutkan berdasarkan nilai set <entri <string, integer >> ks = us.entryset (); Daftar <entri <string, integer >> list = new ArrayList <map.entry <string, integer >> (ks); Collections.sort (daftar, pembanding baru <entry <string, integer >> () {@Override int kompleks (entri <string, integer> o1, entri <string, integer> o2) {if (o1.getValue () <o2.getValue ()) return -1; else if (o1.getValue (); System.out.println (daftar);Usulkan entri peta ke dalam struktur yang ditetapkan, lalu ubah set ke dalam daftar, dan akhirnya mengurutkannya sesuai dengan daftar.
Diskusi singkat di atas tentang masalah penyortiran dalam koleksi Java adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.