Saya telah melihat kelas yang mengimplementasikan Comparable dan Comparator . Apa artinya ini? Mengapa saya menggunakan yang satu di atas yang lain?
Saya telah melihat kelas yang mengimplementasikan Comparable dan Comparator . Apa artinya ini? Mengapa saya menggunakan yang satu di atas yang lain?
Jawaban:
Teks di bawah ini berasal dari Pembanding vs Sebanding
Sebanding
Objek yang sebanding mampu membandingkan dirinya dengan objek lain. Kelas itu sendiri harus mengimplementasikan java.lang.Comparable
antarmuka agar dapat membandingkan instansnya.
Pembanding
Objek pembanding mampu membandingkan dua objek yang berbeda. Kelas tidak membandingkan instance-nya, tetapi beberapa instance kelas lain. Kelas pembanding ini harus mengimplementasikan java.util.Comparator
antarmuka.
Menerapkan Comparable
berarti " Saya dapat membandingkan diri saya dengan objek lain. " Ini biasanya berguna ketika ada satu perbandingan standar alami.
Menerapkan Comparator
berarti " Saya dapat membandingkan dua objek lainnya. " Ini biasanya berguna ketika ada beberapa cara membandingkan dua contoh jenis - misalnya Anda dapat membandingkan orang berdasarkan usia, nama dll.
Person
implement Comparable
, karena Anda tidak dapat mengubah bagaimana dua orang dibandingkan.
Person
. 2) Komparator, misalnya PersonAgeComparator
yang dapat membandingkan dua entitas yang berbeda dan memutuskan mana yang harus didahulukan dalam urutan semacam itu. 3) Kode sortir, yang mengambil koleksi entitas dan pembanding, dan mengurutkan koleksi menggunakan pembanding untuk menentukan urutan.
Sebanding memungkinkan kelas mengimplementasikan perbandingannya sendiri:
Sebagai perbandingan, pembanding adalah perbandingan eksternal:
Di kedua implementasi, Anda masih dapat memilih untuk apa yang ingin Anda bandingkan . Dengan obat generik, Anda dapat mendeklarasikannya, dan memeriksanya pada waktu kompilasi. Ini meningkatkan keamanan, tetapi juga merupakan tantangan untuk menentukan nilai yang sesuai.
Sebagai panduan, saya biasanya menggunakan kelas atau antarmuka paling umum yang dapat dibandingkan objek itu, dalam semua kasus penggunaan yang saya bayangkan ... Definisi yang tidak terlalu tepat! :-(
Comparable<Object>
memungkinkan Anda menggunakannya dalam semua kode pada waktu kompilasi (yang baik jika diperlukan, atau buruk jika tidak dan Anda kehilangan kesalahan waktu kompilasi); implementasi Anda harus mengatasi objek, dan dilemparkan sesuai kebutuhan tetapi dengan cara yang kuat.Comparable<Itself>
sangat ketat sebaliknya.Lucu, ketika Anda mensubclass Itself ke Subclass, Subclass juga harus sebanding dan kuat tentang hal itu (atau itu akan melanggar Prinsip Liskov, dan memberi Anda kesalahan runtime).
java.lang.Comparable
Untuk mengimplementasikan Comparable
antarmuka, kelas harus menerapkan metode tunggalcompareTo()
int a.compareTo(b)
Anda harus memodifikasi kelas yang instansinya ingin Anda urutkan. Sehingga hanya satu urutan urutan yang bisa dibuat per kelas.
java.util.Comparator
Untuk mengimplementasikan antarmuka Comparator, kelas harus menerapkan metode tunggal compare()
int compare (a,b)
Comparable
biasanya lebih disukai. Tetapi kadang-kadang kelas sudah mengimplementasikan Comparable
, tetapi Anda ingin mengurutkan pada properti yang berbeda. Maka Anda terpaksa menggunakan Comparator
.
Beberapa kelas sebenarnya menyediakan Comparators
kasus umum; misalnya, String
s secara case-sensitive secara default ketika diurutkan, tetapi ada juga yang Comparator
disebut statis CASE_INSENSITIVE_ORDER
.
berikut adalah beberapa perbedaan antara Pembanding dan Sebanding yang saya temukan di web:
Jika Anda melihat perbedaan logis antara keduanya adalah Comparator di Java membandingkan dua objek yang diberikan kepadanya, sedangkan antarmuka yang sebanding membandingkan referensi "ini" dengan objek yang ditentukan.
Sebanding dengan Jawa digunakan untuk menerapkan pemesanan objek secara alami. Di Java API String, kelas Date dan wrapper mengimplementasikan antarmuka Sebanding.
Jika ada kelas yang mengimplementasikan antarmuka Sebanding di Jawa maka koleksi objek itu baik Daftar atau Array dapat diurutkan secara otomatis dengan menggunakan metode Collections.sort () atau Array.sort () dan objek akan disortir berdasarkan urutan alami yang ditentukan oleh metode CompareTo.
Objek yang mengimplementasikan Comparable in Java dapat digunakan sebagai kunci dalam peta yang diurutkan atau elemen dalam set yang diurutkan misalnya TreeSet, tanpa menentukan pembanding apa pun.
site: Bagaimana cara menggunakan Comparator dan Comparable di Java? Dengan contoh
Baca selengkapnya: Bagaimana cara menggunakan Comparator dan Comparable di Java? Dengan contoh
Comparable
adalah untuk objek dengan pemesanan alami. Objek itu sendiri tahu bagaimana harus dipesan.
Comparator
adalah untuk objek tanpa pemesanan alami atau ketika Anda ingin menggunakan pemesanan yang berbeda.
Perbedaan antara pembanding dan antarmuka yang sebanding
Comparable
digunakan untuk membandingkan dirinya sendiri dengan menggunakan dengan objek lain.
Comparator
digunakan untuk membandingkan dua tipe data objek.
Jika Anda melihat maka perbedaan logis antara keduanya Comparator
di Jawa membandingkan dua objek yang diberikan kepadanya, sementara Comparable
antarmuka membandingkan referensi "ini" dengan objek yang ditentukan.
Comparable
di Jawa digunakan untuk mengimplementasikan pemesanan objek secara alami. Di Java API String, Date dan wrapper mengimplementasikan Comparable
antarmuka.
Jika ada kelas yang mengimplementasikan Comparable
antarmuka di Jawa maka koleksi objek itu baik List
atau Array
dapat diurutkan secara otomatis dengan menggunakan Collections.sort()
atau Array.sort()
metode dan objek akan diurutkan berdasarkan urutan alami yang ditentukan oleh compareTo
metode.
Objek yang mengimplementasikan Comparable
di Jawa dapat digunakan sebagai kunci dalam peta yang diurutkan atau elemen dalam set yang diurutkan misalnya TreeSet
, tanpa menentukan apa pun Comparator
.
Lib anotasi saya untuk mengimplementasikan Comparable and Comparator:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
Klik tautan untuk melihat lebih banyak contoh. compamatic