Sebanding dan Pembanding ialah dua antara muka berkaitan pengisihan Java, juga dikenali sebagai pengisihan semula jadi dan pengisihan tersuai. Saya baru-baru ini membaca kandungan yang berkaitan, dan sekarang saya akan merekodkan status pembelajaran saya sendiri di bawah.
Comparable dan Comparator ialah dua antara muka tentang pengisihan, digunakan untuk melaksanakan fungsi pengisihan dalam koleksi Java. Fungsi khusus boleh didapati daripada API.
Ini adalah pengenalan ringkas daripada dokumentasi API:
Antara muka ini mengenakan jumlah pesanan pada objek setiap kelas yang melaksanakannya. Susunan ini dirujuk sebagai susunan semula jadi kelas, dan kaedah compareTo kelas dirujuk sebagai kaedah perbandingan semula jadinya kerana objek ini kurang daripada, sama dengan atau lebih besar daripada objek yang ditentukan.
Penggunaan:
Pelaksanaan Comparable diperlukan untuk mengisih kelas entiti antara muka, dan mengatasi kaedah compareTo(), anda boleh mempunyai fungsi pengisihan. Sesetengah koleksi (seperti TreeSet) yang mengisih elemen secara automatik akan memanggil kaedah CompareTo() secara automatik untuk mengisih apabila elemen dimasukkan ke dalam koleksi (dengan syarat elemen mesti melaksanakan antara muka ini). Tetapi ia juga boleh digunakan di tempat lain, bukan sahaja terhad kepada TreeSet, ia digunakan secara meluas.
Ini adalah pengenalan ringkas daripada dokumentasi API:
Fungsi perbandingan, yang mengenakan jumlah pesanan pada beberapa koleksi daripada objek. Pembanding boleh dihantar ke kaedah isihan (seperti Collections.sort atau Arrays.sort) untuk membenarkan kawalan yang tepat ke atas susunan isihan juga boleh digunakan untuk mengawal susunan struktur data tertentu (seperti set diisih atau peta diisih), atau untuk menyediakan pesanan untuk koleksi objek yang tidak mempunyai susunan semula jadi.
Penggunaan:
Pembanding ialah yang ketiga- antara muka parti , penggunaan khusus ialah: reka bentuk pembanding, cipta kelas, laksanakan antara muka ini dan ganti kaedah compare(). Dan memandangkan Comparator ialah antara muka berfungsi, ungkapan Lambda boleh digunakan dan bukannya objek Comparator, menjadikan kod lebih ringkas dan jelas.
Nota: Kandungan dalam blog mungkin tidak begitu terperinci, jadi jika anda ingin melihat butiran khusus, anda harus merujuk kepada buku dan dokumen rasmi Terutamanya, kandungan di sini adalah lebih kepada memperkenalkan secara ringkas penggunaan asas.
Kelas entiti ujian: Anjing
public class Dog implements Comparable<Dog>{ private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Dog [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Dog dog) { return this.age > dog.age ? 1 : this.age < dog.age ? -1 : 0; } }
Kelas entiti ujian: Kucing
rreeeKelas ujian : Ujian
public class Cat implements Comparable<Cat>{ private String name; private Integer age; public Cat(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Cat [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Cat o) { //可以直接调用,这样更简单 //调换 o.age 和 this.age 就是相反的顺序 return o.age.compareTo(this.age); } }
Tangkapan skrin berjalan:
Arahan tambahan: list.sort()
Kaedah
Penerangan dalam dokumentasi API:
Isih senarai ini mengikut susunan yang diaruhkan oleh Pembanding yang ditentukan.
Semua elemen dalam senarai ini mestilah boleh dibandingkan dengan menggunakan pembanding yang ditentukan (iaitu, c .compare(e1, e2) tidak boleh membuang ClassCastException untuk mana-mana elemen e1 dan e2 dalam senarai Jika pembanding yang ditentukan adalah batal maka semua elemen dalam senarai ini mesti melaksanakan antara muka Sebanding dan susunan semula jadi elemen harus digunakan). . Senarai ini mesti boleh diubah suai, tetapi tidak perlu diubah saiznya.
Seperti yang anda lihat, kaedah ini mengisih melalui objek Comparator Jika parameter masuk adalah batal, pengisihan semula jadi akan dilakukan : prasyarat untuk pengisihan semula jadi ialah kelas entiti yang sepadan melaksanakan antara muka Sebanding dan mengatasi kaedah compareTo().
Atas ialah kandungan terperinci Cara menggunakan Comparable dan Comparator dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!