Saya telah melihat kelas yang mengimplementasikan Comparable dan Comparator . Apa artinya ini? Mengapa saya menggunakan yang satu di atas yang lain?
java
comparator
comparable
Nick Heiner
sumber
sumber
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.sumber
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.sumber
Person
implementComparable
, karena Anda tidak dapat mengubah bagaimana dua orang dibandingkan.Person
. 2) Komparator, misalnyaPersonAgeComparator
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.sumber
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)
sumber
Comparable
adalah untuk menyediakan pemesanan default pada objek data, misalnya jika objek data memiliki urutan alami.A
Comparator
mewakili pemesanan itu sendiri untuk penggunaan tertentu.sumber
Comparable
biasanya lebih disukai. Tetapi kadang-kadang kelas sudah mengimplementasikanComparable
, tetapi Anda ingin mengurutkan pada properti yang berbeda. Maka Anda terpaksa menggunakanComparator
.Beberapa kelas sebenarnya menyediakan
Comparators
kasus umum; misalnya,String
s secara case-sensitive secara default ketika diurutkan, tetapi ada juga yangComparator
disebut statisCASE_INSENSITIVE_ORDER
.sumber
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
sumber
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.sumber
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.sumber
Jika Anda melihat maka perbedaan logis antara keduanya
Comparator
di Jawa membandingkan dua objek yang diberikan kepadanya, sementaraComparable
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 mengimplementasikanComparable
antarmuka.Jika ada kelas yang mengimplementasikan
Comparable
antarmuka di Jawa maka koleksi objek itu baikList
atauArray
dapat diurutkan secara otomatis dengan menggunakanCollections.sort()
atauArray.sort()
metode dan objek akan diurutkan berdasarkan urutan alami yang ditentukan olehcompareTo
metode.Objek yang mengimplementasikan
Comparable
di Jawa dapat digunakan sebagai kunci dalam peta yang diurutkan atau elemen dalam set yang diurutkan misalnyaTreeSet
, tanpa menentukan apa punComparator
.sumber
Lib anotasi saya untuk mengimplementasikan Comparable and Comparator:
Klik tautan untuk melihat lebih banyak contoh. compamatic
sumber