JavaRush /Java Blog /Random-TK /deňeşdirmek üçin

deňeşdirmek üçin

Toparda çap edildi
Bir massiwde ýa-da kolleksiýada saklanýan şol bir görnüşdäki obýektleri tertiplemek üçin Java döredijiler tapdylar Comparable. Diňe bir usuly yglan edýär compareTo:
public interface Comparable<T> {
    public int compareTo(T o);
}
deňeşdirmek usuly - 1Interfeýs, Comparableusula parametr hökmünde kabul edýän obýektiň görnüşi bilen parametrleşdirilýär compareTo. Bu ýagdaýda, haýsy obýektleri deňeşdirjekdigimizi düzüjä duýduryş berýäris. Görnüşiň şahsyýet şerti ýerine ýetirilmese, ýalňyşlyk alarys ClassCastException. Java-da bir usul, compareToçagyryş obýektini parametr hökmünde kabul edilen obýekt bilen deňeşdirýär we deňeşdirmegiň netijesinde bitewi san görkezýär:
  • çagyryş obýekti parametr hökmünde geçen obýektden has uly bolsa polo positiveitel;
  • çagyryş obýekti parametr hökmünde geçen obýektden kiçi bolsa negatiw;
  • obýektler deň bolsa null.
Obýekt deňeşdirme logikasyny ýazmak synp döredijiniň ýeke-täk aladasy bolup, sargyt etmegiň islenýän netijeleri bilen kesgitlenýär.

Java-da näme üçin deňeşdirmek usuly gerek?

Java programmisti ýygy-ýygydan obýektleriň sanawlary we sanawlary bilen iş salyşmaly bolýar. Köp mukdarda maglumatlar bilen işleýän wagtyňyz ony köplenç tertipli ýa-da tertipli görnüşde saklamak amatly. Birinjiden, zerur maglumatlary gözläniňizde kolleksiýa bilen işlemegi çaltlaşdyrýar, ikinjiden, guramaçylykly maglumatlar has gowy kabul edilýär.
deňeşdirmek usuly - 2
Obýektleriň toplumyny tertipleşdirmegiň iň ýönekeý we täsirli usullaryndan biri synp usulydyr sort()we Arrayssanaw görnüşindäki obýektleriň ýygyndysy şuňa meňzeş synp usulydyr Collections. Bu usullary ulanmak bilen tertiplemek üçin, Java döredijiler bize tertipleşdirmegiň ölçeglerini nädip kesgitlemelidigini saýlamaga erkinlik berdiler: Comparabletertiplemek isleýän obýektlerimiziň synpyna interfeýsi ornaşdyrmak ýa-da ulanmak arkaly Comparator. Birinji ýagdaýda tertipleşdirmek usullary, massiw ýa-da sanaw görnüşinde obýektleriň toplumyny kabul edýär:
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
ikinjisinde - goşmaça interfeýsiň ýerine ýetirilişi Comparator:
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
Interfeýs, Comparabletertiplenende obýektleriň tebigy (biziň nukdaýnazarymyzdan iň logiki) tertibini bellemek islänimizde ulanylýar. Şeýle hem dizaýn tapgyrynda bu synpyň obýektlerini deňeşdirmek üçin algoritmi “gaty sim” etmegiň usulydyr. Mysal üçin , bu interfeýsiň ýerine ýetirilişini ulanyp , esasy başlangyç görnüşleriň örtük synplarynda tebigy sargyt etmegiň ölçegleri kesgitlenýär : Byte,,,,,,,, . Bu, bu synplaryň zerur bolsa programmada ulanyp boljak ýerine ýetirilen usulynyň bardygyny aňladýar . Bu usulyň synpda nähili durmuşa geçirilýändigini görmek üçin setir deňeşdirmesiniň mysalyna seredeliň . CharacterLongIntegerShortDoubleFloatBooleanStringcompareToString
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);
        }
    }
Bu kody usul bilen ýerine ýetirsek main, aşakdaky netijäni alarys:
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
Synpdaky mysaldan görnüşi ýaly String, usul compareTosetirleri elipbiý, leksikografiki we baş harplar bilen tertipleýär. Hut şu deňeşdirme tertibi synpy döredijiler tarapyndan Stringtebigy diýip kesgitlenýär. Leksikografiki tertipiň nämedigine has ýönekeý düşünmek üçin sözleriň dil sözlüklerinde nähili ýerleşdirilendigini ýatda saklamak ýeterlikdir. Sanlar deňeşdirilende obýektler ýokarlanýan tertipde sargyt edilýär. Bu deňeşdirme logikasy Byte,,,,,, . Character_ Long_ Integer_ShorDoubleFloat

Deňeşdirmäni synpymyzda durmuşa geçireliň

Obýektleri synpyňyz bilen deňeşdirmek ukybyny nädip gurup boljakdygynyň bir mysalyna seredeliň. Java usuly durmuşa geçirilende compareto, obýektleri sargyt etmegiň bir ýa-da birnäçe ölçegini kesgitläp bileris, şeýle hem synplardan we usullary comparetoulanyp Stringbileris Integer. Mysal üçin, synp obýektleri üçin Useratlar boýunça, deň atlar bolsa ýaş boýunça tertipleşdirýäris. Obýektler tebigy tertipde tertipleşdiriler (bahasy ýokarlanýar). Synp 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 + '\'' +
                '}';
    }
Synp usuly bilen compareTosynpda ýerine ýetirilen usulyň işleýşini synap göreliň : UsersortCollections
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);
    }
}
 }
}
Usulyň netijesi 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'}
Geliň, jemläliň. Everythinghli zatda tertip-düzgüni goldaýan bolsaňyz we zatlaryňyzy massiwde ýa-da gereksiz kodsyz tertipleşdirmek isleseňiz, interfeýsi ulanyň Comparable. Deňeşdirmek usulynyň ýerine ýetirilmegi, synpyňyzdaky zatlary tebigy sargyt etmegiň mehanizminde gurmagy aňsatlaşdyrýar. Java kitaphanasynda beýan edilen adaty synplaryň ýygyndylary we massiwleri bilen işlemeli bolsaňyz, compareTobu synplarda taýýar amallary ulanyň.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION