Ketika pengumpulan atau array yang perlu diurutkan bukanlah tipe numerik yang sederhana, Anda biasanya dapat menggunakan pembanding atau sebanding untuk mengimplementasikan penyortiran objek atau penyortiran khusus dengan cara yang sederhana.
Fungsi perbandingan, yang memaksakan pemesanan total pada beberapa kumpulan objek. Komparator dapat diteruskan ke metode sortir (seperti collections.sort atau array. Pembanding juga dapat digunakan untuk mengontrol urutan struktur data tertentu (seperti set yang diurutkan atau peta yang diurutkan), atau untuk memberikan pemesanan untuk koleksi objek yang tidak memiliki pemesanan alami. ------ API
Anda dapat mengurutkan daftar string secara langsung karena objek string telah membantu kami mengimplementasikan antarmuka yang sebanding, jadi jika orang kami ingin mengurutkan, kami juga perlu mengimplementasikan pembanding.
1. Pembanding
Urutkan objek yang disimpan di LinkedList
impor java.util.comparator; import java.util.linkedlist; class person {private float height; nama string pribadi; Orang (tinggi float) {this.height = tinggi; } public float getHeight () {return height; } public void setHeight (tinggi float) {this.height = tinggi; } public string getName () {return name; } public void setName (name string) {this.name = name; }} class personHeight mengimplementasikan pembanding <fone> {@Override // Tulis ulang metode perbandingan, return <0 tetap tidak berubah, return> 0 ditukar secara berurutan (tetap pesanan naik) public int bandar } else {return -1; }}} Public Class Question3 {public static void main (string [] args) {person p1 = orang baru (23.4f); p1.setname ("stud1"); Orang P2 = orang baru (2.34F); p2.setname ("stud2"); Orang P3 = orang baru (34.32F); p3.setname ("stud3"); Orang P4 = orang baru (56.45F); p4.setname ("stud4"); Orang P5 = orang baru (21.4F); p5.setname ("stud5"); LinkedList <Fon> al = new LinkedList <Fon> (); Al.Add (P1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); // Panggil metode sortir untuk mengimplementasikan penyortiran collections.sort (al, new personheight ()); // Transip output untuk (orang P: al) system.out.println (p.getName ()); }}
Terlampir:
// urutkan tanggal/*** Jika O1 kurang dari O2, kembalikan angka negatif; Jika O1 lebih besar dari O2, kembalikan angka positif; Jika mereka setara, kembalikan 0; */@Overridepublic int perbandingan (langkah o1, langkah o2) {date accepttime1 = utiltool.strtodate (o1.getaccepttime (), null); Tanggal accepttime2 = utiltool.strtodate (o2.getaccepttime (), null); // naik bidang tanggal, jika Anda ingin turun, Anda dapat menggunakan metode sebelumnya jika (acceptime1.after (accepttime2)) return 1; return -1;}2. Sebanding
Impor java.util.collections; impor java.util.comparator; import java.util.linkedlist; kelas orang mengimplementasikan sebanding {private float tinggi; nama string pribadi; Orang (tinggi float) {this.height = tinggi; } public float getHeight () {return height; } public void setHeight (tinggi float) {this.height = tinggi; } public string getName () {return name; } public void setName (name string) {this.name = name; } @Override public int compareto (objek o) {// TODO Metode yang dihasilkan otomatis Stub if (this.height> ((orang) o) .height) {return 1; } lain return -1; }} public class question3 {public static void main (string [] args) {person p1 = orang baru (23.4f); p1.setname ("stud1"); Orang P2 = orang baru (2.34F); p2.setname ("stud2"); Orang P3 = orang baru (34.32F); p3.setname ("stud3"); Orang P4 = orang baru (56.45F); p4.setname ("stud4"); Orang P5 = orang baru (21.4F); p5.setname ("stud5"); LinkedList <Fon> al = new LinkedList <Fon> (); Al.Add (P1); al.add (p2); al.add (p3); al.add (p4); al.add (p5); Collections.sort (al); untuk (orang p: al) system.out.println (p.getName ()); }}Tiga. Perbandingan
Sebanding didefinisikan di dalam kelas orang .
Pembanding didefinisikan di luar orang. Pada saat ini, struktur kelas orang kita tidak perlu berubah.
Kedua metode ini memiliki kelebihan dan kekurangannya sendiri. Mudah digunakan sebanding. Selama objek yang mengimplementasikan antarmuka yang sebanding menjadi objek yang sebanding, ia perlu memodifikasi kode sumber. Keuntungan menggunakan pembanding adalah tidak perlu memodifikasi kode sumber, tetapi menerapkan pembanding. Ketika objek kustom perlu dibandingkan, Anda dapat membandingkan ukurannya dengan melewati pembanding dan objek bersama -sama. Sebagai pembanding, pengguna dapat menerapkan logika yang kompleks dan umum sendiri, sehingga mereka dapat mencocokkan beberapa objek yang relatif sederhana, yang dapat menghemat banyak tenaga kerja berulang.