Pendahuluan yang sebanding
Sebanding adalah antarmuka penyortiran.
Jika kelas mengimplementasikan antarmuka yang sebanding, itu berarti "kelas ini mendukung penyortiran". Karena kelas yang menerapkan penyortiran dukungan antarmuka yang sebanding, dengan asumsi bahwa sekarang ada "daftar daftar (atau array) objek kelas yang mengimplementasikan antarmuka yang sebanding", daftar daftar (atau array) dapat diurutkan berdasarkan collections.sort (atau arrays.sort).
Selain itu, "objek kelas yang mengimplementasikan antarmuka yang sebanding" dapat digunakan sebagai kunci dalam "peta yang dipesan (seperti treemap)" atau elemen dalam "set yang dipesan (treeset)" tanpa menentukan pembanding.
1. Pembanding dan sebanding adalah sama
Mereka semua adalah antarmuka Java, dan digunakan untuk membandingkan ukuran kelas khusus.
Apa itu kelas kustom: seperti orang kelas publik {string name; usia int}.
Ketika kita memiliki daftar orang seperti itu, yang berisi orang1, orang2, orang3 ......, kita menggunakan collections.sort (daftar orang),
Hasil yang diharapkan tidak diperoleh. Seseorang harus bertanya pada saat ini, mengapa kita dapat mengurutkan daftar string:
Misalnya, StringList {"Hello1", "Hello3", "Hello2"}, Collections.sort (StringList) bisa mendapatkan penyortiran yang benar, itu karena karena itu karena karena
Objek String telah membantu kami mengimplementasikan antarmuka yang sebanding, jadi jika orang kami ingin mengurutkan, kami juga perlu menerapkan pembanding.
2. Perbedaan antara pembanding dan sebanding
Sebanding
Sebanding didefinisikan di dalam kelas orang:
Persion kelas publik mengimplementasikan {.. komparasi ukuran orang ...},
Karena pembanding telah diimplementasikan, orang kami sekarang menjadi objek yang dapat membandingkan ukuran. Fungsi perbandingannya persis sama dengan string, dan dapat dibandingkan kapan saja dan di mana saja, karena orang sekarang memiliki ukuran yang berbeda. Collections.sort (daftar person) bisa mendapatkan hasil yang benar.
Pembanding
Pembanding didefinisikan di luar orang. Saat ini, struktur kelas orang kita tidak perlu mengubah perubahan apa pun, seperti
orang kelas publik {name string; usia int},Kemudian kami mendefinisikan pembanding lain:
Public Personcomparator mengimplementasikan pembanding () {.. komparasi ukuran orang ...}, Cara membandingkan ukuran dua orang di personeling. Jadi, menggunakan metode ini, saat kami ingin menyortir daftar orang,
Selain lewat daftar orang, kita juga perlu melewati personkompeparator, karena cara membandingkan ukuran orang dalam personkompeparator
Diterapkan di, seperti:
Collections.sort (daftar pribadi, personkomparator baru ()).
3. Contoh pembanding dan sebanding
Sebanding:
Untuk mengimplementasikan antarmuka yang sebanding, Anda harus mengganti metode compareTo. Menerapkan perbandingan dalam metode compareTo:
orang kelas publik mengimplementasikan sebanding {string name; int age; public int compareto (orang lain) {int i = 0; i = name.compareto (Other.name); // Perbandingan menggunakan string if (i == 0) {// Jika namanya sama, bandingkan usia, hasil usia pengembalian usia kembali - lain.age;} else {return i; // namanya berbeda, kembalikan hasil membandingkan nama.}}}Pada saat ini, kita dapat secara langsung mengurutkannya dengan collections.sort (daftar person).
Pembanding:
Menerapkan komparator membutuhkan pengesahan metode perbandingan:
Public Class Person {string name; int age;} class personComparator mengimplementasikan komparator <fone> {public int bandar // perbandingan menggunakan string if (i == 0) {// Jika namanya sama, bandingkan usia, kembalikan hasil membandingkan usia pengembalian satu. // Namanya berbeda, kembalikan hasil dari membandingkan nama.}}} Collections.4: Ringkasan
Kedua metode memiliki kelebihan dan kekurangannya sendiri. Mudah digunakan sebanding. Selama objek yang mengimplementasikan antarmuka yang sebanding menjadi objek yang sebanding,
Namun, kode sumber perlu dimodifikasi. Keuntungan menggunakan pembanding adalah tidak perlu memodifikasi kode sumber, tetapi juga mengimplementasikan pembanding. Ketika objek kustom perlu dibandingkan, pembanding dan objek dapat dilewati bersama untuk membandingkan ukurannya. 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.