Untuk mengatur objek dengan tipe yang sama yang disimpan dalam array atau koleksi, pengembang Java membuat
Salah satu cara paling sederhana dan efektif untuk mengurutkan array objek adalah metode
Comparable
. Ini hanya mendeklarasikan satu metode compareTo
:
public interface Comparable<T> {
public int compareTo(T o);
}
Sebuah antarmuka Comparable
diparameterisasi berdasarkan tipe objek yang diterimanya sebagai parameter metode compareTo
. Dalam hal ini, kami memperingatkan kompiler jenis objek apa yang akan kami bandingkan. Jika kondisi identitas tipe tidak terpenuhi, kami akan menerima pesan kesalahan ClassCastException
. Sebuah metode compareTo
di Java membandingkan objek pemanggil dengan objek yang diteruskan sebagai parameter dan mengembalikan bilangan bulat sebagai hasil perbandingan:
- positif jika objek pemanggil lebih besar dari objek yang diteruskan sebagai parameter;
- negatif jika objek pemanggil lebih kecil dari objek yang diteruskan sebagai parameter;
- null jika objeknya sama.
Mengapa metode bandingkanTo diperlukan di Java?
Seorang programmer Java sering kali harus berurusan dengan array dan daftar objek. Saat bekerja dengan data dalam jumlah besar, seringkali lebih mudah untuk menyimpannya dalam bentuk yang terorganisir atau diurutkan. Pertama, ini mempercepat pengumpulan saat mencari informasi yang diperlukan, dan kedua, data yang terorganisir dapat dilihat dengan lebih baik secara visual.sort()
kelas Arrays
, dan kumpulan objek dalam bentuk daftar adalah metode kelas serupa Collections
. Untuk mengurutkan menggunakan metode ini, pengembang Java memberi kita kebebasan untuk memilih cara menentukan kriteria pengurutan: dengan mengimplementasikan antarmuka Comparable
di kelas objek yang ingin kita urutkan, atau dengan menggunakan metode Comparator
. Dalam kasus pertama, metode pengurutan menerima sekumpulan objek dalam bentuk array atau daftar:
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
dan yang kedua - ditambah implementasi antarmuka lainnya Comparator
:
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
Antarmuka Comparable
digunakan ketika kita ingin mengatur urutan objek yang alami (paling logis dari sudut pandang kita) saat mengurutkan. Ini juga merupakan cara untuk “mengatur” algoritma untuk membandingkan objek kelas ini pada tahap desain. Misalnya, dengan menggunakan implementasi antarmuka ini, kriteria pengurutan alami di kelas pembungkus tipe primitif utama ditentukan: , , Byte
, Character
, Long
, Integer
, Short
, Double
, Float
. Ini juga berarti bahwa kelas-kelas ini mempunyai metode implementasi yang dapat kita gunakan dalam program jika diperlukan. Mari kita lihat contoh perbandingan string untuk melihat bagaimana metode ini diterapkan di kelas . Boolean
String
compareTo
String
String str1="Аарон";
String str2="АAPOH";
String str3="аарон";
String str4="ААрон";
String str5="аАрон";
String str6="Берта";
String str7="берта";
String[] allStr=new String[]{str1,str2,str3,str4, str5,str6, str7};
Arrays.sort(allStr);
for (String s:allStr){
System.out.println(s);
}
}
Jika kita mengeksekusi kode ini dalam metode tersebut main
, kita akan mendapatkan hasil sebagai berikut:
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
Seperti yang dapat Anda lihat pada contoh di kelas String
, metode ini compareTo
menyusun string berdasarkan abjad, leksikografis, dan peka huruf besar-kecil. Urutan perbandingan string inilah yang didefinisikan oleh pengembang kelas String
sebagai sesuatu yang alami. Untuk lebih memahami apa itu tatanan leksikografis, cukup mengingat bagaimana kata-kata disusun dalam kamus bahasa. Saat membandingkan angka, objek diurutkan dalam urutan menaik. Logika perbandingan ini tertanam di kelas Byte
, Character
, Long
, Integer
, Shor
, Double
, Float
.
Mari kita terapkan perbandingan di kelas kita
Mari kita lihat contoh bagaimana Anda bisa membangun kemampuan untuk membandingkan objek ke dalam kelas Anda. Saat mengimplementasikancompareto
metode Java, kita dapat menentukan satu atau lebih kriteria untuk mengurutkan objek, dan juga menggunakan metode compareto
dari kelas String
dan Integer
. Misalnya, untuk objek kelas, User
kami mengatur pengurutan berdasarkan nama, dan jika namanya sama, berdasarkan usia. Objek akan disusun dalam tatanan alaminya (seiring dengan meningkatnya nilainya). Kelas User
:
public class User implements Comparable <User>{//добавляем возможность сравнивать an objectы User
private String name;
private Integer age;
private String email;
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
@Override
//реализуем метод compareTo интерфейса Comparable
public int compareTo(User o) {
//используем метод compareTo из класса String для сравнения имен
int result = this.name.compareTo(o.name);
//если имена одинаковые - сравниваем возраст,
используя метод compareTo из класса Integer
if (result == 0) {
result = this.age.compareTo(o.age);
}
return result;
}
@Override
public String toString() {
return "{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
Mari kita uji pengoperasian metode compareTo
yang diterapkan di kelas User
menggunakan metode sort
kelas Collections
:
public static void main(String[] args) {
User user = new User("Andrey", 19, "andryha@mail.ru");
User user2 = new User("Олег", 25, "oleg@mail.ru");
User user3 = new User("Andrey", 24,"opr@google.com");
User user4 = new User("Igor", 16, "igor@mail.ru");
User user5 = new User("Andrey", 44,"stary@google.com");
List<User> list = new ArrayList<>();
list.add(user);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
System.out.println("-------до сортировки--------");
for (User u : list) {
System.out.println(u);
}
System.out.println("-------после сортировки-----");
Collections.sort(list);
for (User u : list) {
System.out.println(u);
}
}
}
}
Hasil dari metode main
:
-------до сортировки--------
{name='Андрей', age=19, email='andryha@mail.ru'}
{name='Олег', age=25, email='oleg@mail.ru'}
{name='Андрей', age=24, email='opr@google.com'}
{name='Игорь', age=16, email='igor@mail.ru'}
{name='Андрей', age=44, email='stary@google.com'}
-------после сортировки-----
{name='Андрей', age=19, email='andryha@mail.ru'}
{name='Андрей', age=24, email='opr@google.com'}
{name='Андрей', age=44, email='stary@google.com'}
{name='Игорь', age=16, email='igor@mail.ru'}
{name='Олег', age=25, email='oleg@mail.ru'}
Jadi, mari kita rangkum. Jika Anda adalah pendukung keteraturan dalam segala hal dan ingin mengatur objek Anda dalam array atau daftar tanpa kode yang tidak perlu, gunakan antarmuka Comparable
. Implementasi metode bandingkanTo membuatnya cukup mudah untuk membangun mekanisme pengurutan objek secara alami di kelas Anda. Jika Anda harus bekerja dengan koleksi dan array objek kelas standar yang dijelaskan di perpustakaan Java, gunakan implementasi yang sudah jadi compareTo
di kelas ini.
GO TO FULL VERSION