JavaRush /Blog Jawa /Random-JV /metode compareTo

metode compareTo

Diterbitake ing grup
Kanggo ngatur obyek saka jinis sing padha disimpen ing larik utawa koleksi, pangembang Java teka karo Comparable. Iku nyatakake mung siji cara compareTo:
public interface Comparable<T> {
    public int compareTo(T o);
}
mbandhingake karo metode - 1Antarmuka Comparablediparamè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 compareToing 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.
Nulis logika comparison obyek iku sawijine badhan saka pangembang kelas lan ditemtokake dening asil sing dipengini saka pesenan.

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.
mbandhingake karo metode - 2
Salah siji cara sing paling gampang lan paling efektif kanggo ngurutake array obyek yaiku metode 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 Comparableing 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 Comparabledigunakake 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. StringIki uga tegese kelas kasebut duwe metode sing ditindakake compareTosing 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 compareTongatur senar miturut abjad, leksikografis, lan sensitif huruf cilik. Iki urutan perbandingan string sing ditetepake dening pangembang kelas Stringminangka 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 ngleksanakake comparetocara Jawa, kita bisa nemtokake siji utawa luwih kritéria kanggo urutan obyek, lan uga nggunakake cara comparetosaka Stringlan kelas Integer. Contone, kanggo obyek kelas Userkita 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 compareTosing ditindakake ing kelas Usernggunakake metode sortkelas 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 compareToing kelas kasebut.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION