JavaRush /Java Blog /Random-ID /metode bandingkanTo

metode bandingkanTo

Dipublikasikan di grup Random-ID
Untuk mengatur objek dengan tipe yang sama yang disimpan dalam array atau koleksi, pengembang Java membuat Comparable. Ini hanya mendeklarasikan satu metode compareTo:
public interface Comparable<T> {
    public int compareTo(T o);
}
metode bandingkanTo - 1Sebuah antarmuka Comparablediparameterisasi 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 compareTodi 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.
Menulis logika perbandingan objek adalah satu-satunya perhatian pengembang kelas dan ditentukan oleh hasil pemesanan yang diinginkan.

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.
metode bandingkanTo - 2
Salah satu cara paling sederhana dan efektif untuk mengurutkan array objek adalah metode 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 Comparabledi 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 Comparabledigunakan 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 . BooleanStringcompareToString
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 compareTomenyusun string berdasarkan abjad, leksikografis, dan peka huruf besar-kecil. Urutan perbandingan string inilah yang didefinisikan oleh pengembang kelas Stringsebagai 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 mengimplementasikan comparetometode Java, kita dapat menentukan satu atau lebih kriteria untuk mengurutkan objek, dan juga menggunakan metode comparetodari kelas Stringdan Integer. Misalnya, untuk objek kelas, Userkami 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 compareToyang diterapkan di kelas Usermenggunakan 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 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 compareTodi kelas ini.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION