Kanggo ngatur obyek saka jinis sing padha disimpen ing larik utawa koleksi, pangembang Java teka karo
Salah siji cara sing paling gampang lan paling efektif kanggo ngurutake array obyek yaiku metode
Comparable
. Iku nyatakake mung siji cara compareTo
:
public interface Comparable<T> {
public int compareTo(T o);
}
Antarmuka Comparable
diparamèterake miturut jinis obyek sing ditampa minangka parameter kanggo metode kasebut compareTo
. Ing kasus iki, kita ngelekake compiler apa jinis obyek sing arep kanggo mbandhingaké. Yen kondisi identitas jinis ora ketemu, kita bakal nampa kesalahan ClassCastException
. Cara compareTo
ing Jawa mbandhingake obyek panggilan karo obyek sing dilewati minangka parameter lan ngasilake integer minangka asil perbandingan:
- positif yen obyek nelpon luwih gedhe tinimbang obyek liwati minangka parameter;
- negatif yen obyek nelpon luwih cilik tinimbang obyek liwati minangka parameter;
- null yen obyek padha.
Napa metode compareTo dibutuhake ing Jawa?
Programmer Java kerep banget kudu ngatasi array lan dhaptar obyek. Nalika nggarap data sing akeh, asring gampang disimpen ing wangun sing diatur utawa diurutake. Kaping pisanan, nyepetake nggarap koleksi nalika nggolek informasi sing dibutuhake, lan nomer loro, data sing diatur kanthi visual luwih apik.sort()
kelas Arrays
, lan koleksi obyek ing wangun dhaptar yaiku metode kelas sing padha Collections
. Kanggo ngurutake nggunakake metode kasebut, pangembang Java menehi kebebasan kanggo milih cara nemtokake kritéria ngurutake: kanthi ngetrapake antarmuka Comparable
ing kelas obyek sing arep diurutake, utawa nggunakake Comparator
. Ing kasus sing sepisanan, cara ngurutake nampa sakumpulan obyek ing wangun array utawa dhaptar:
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
lan ing kaloro - ditambah implementasine antarmuka liyane Comparator
:
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
Antarmuka Comparable
digunakake nalika kita pengin nyetel urutan obyek alam (paling logis saka sudut pandang kita) nalika ngurutake. Iku uga cara kanggo "hardwire" algoritma kanggo mbandhingaké obyek saka kelas iki ing tataran desain. Contone, nggunakake implementasine antarmuka iki, kritéria kanggo urutan alam ing kelas pambungkus saka jinis primitif utama ditetepake: , Byte
, Character
, , Long
, Integer
, Short
, Double
, Float
, Boolean
. String
Iki uga tegese kelas kasebut duwe metode sing ditindakake compareTo
sing bisa digunakake ing program yen perlu. Ayo goleki conto perbandingan string kanggo ndeleng kepiye cara iki ditindakake ing kelas 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);
}
}
Yen kita nglakokake kode iki ing metode main
, kita bakal entuk asil ing ngisor iki:
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
Kaya sing bisa dideleng ing conto ing kelas String
, metode kasebut compareTo
ngatur senar miturut abjad, leksikografis, lan sensitif huruf cilik. Iki urutan perbandingan string sing ditetepake dening pangembang kelas String
minangka alam. Kanggo mangerteni sing luwih gampang babagan urutan leksikografis, cukup kanggo ngelingi carane tembung disusun ing kamus basa. Nalika mbandhingake angka, obyek diurutake kanthi urutan munggah. Logika perbandingan iki dilebokake ing kelas Byte
, Character
, Long
, Integer
, Shor
, Double
, Float
.
Ayo dileksanakake perbandingan ing kelas kita
Ayo goleki conto carane sampeyan bisa mbangun kemampuan kanggo mbandhingake obyek ing kelas sampeyan. Nalika ngleksanakakecompareto
cara Jawa, kita bisa nemtokake siji utawa luwih kritéria kanggo urutan obyek, lan uga nggunakake cara compareto
saka String
lan kelas Integer
. Contone, kanggo obyek kelas User
kita nyetel ngurutake miturut jeneng, lan ing cilik saka jeneng witjaksono, miturut umur. Obyek bakal disusun miturut urutan alam (minangka regane mundhak). 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 + '\'' +
'}';
}
Ayo nyoba operasi metode compareTo
sing ditindakake ing kelas User
nggunakake 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 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'}
Dadi, ayo ngringkes. Yen sampeyan minangka panyengkuyung pesenan ing kabeh lan pengin ngatur obyek ing larik utawa dhaptar tanpa kode sing ora perlu, gunakake antarmuka Comparable
. Implementasine metode compareTo ndadekake cukup gampang kanggo mbangun mekanisme kanggo ngurutake obyek kanthi alami ing kelas sampeyan. Yen sampeyan kudu nggarap koleksi lan susunan obyek saka kelas standar sing diterangake ing perpustakaan Jawa, gunakake implementasi sing wis siap compareTo
ing kelas kasebut.
GO TO FULL VERSION