Vmesnik primerjalnika se uporablja za razvrščanje objektov uporabniško definiranih razredov. Primerjalni objekt lahko primerja dva predmeta istega razreda . Naslednja funkcija primerja obj1 z obj2.
Sintaksa:
public int compare(Object obj1, Object obj2):>
Recimo, da imamo Array/ArrayList lastne vrste razreda, ki vsebuje polja, kot so št. zvitka, ime, naslov, DOB itd., in moramo matriko razvrstiti glede na št. zvitka ali ime?
1. metoda : En očiten pristop je pisanje lastne funkcije sort() z uporabo enega od standardnih algoritmov. Ta rešitev zahteva ponovno pisanje celotne kode za razvrščanje za različne kriterije, kot sta št. zvitka in ime.
java parseint
2. način: Uporaba primerjalnega vmesnika – primerjalni vmesnik se uporablja za razvrščanje objektov uporabniško definiranega razreda. Ta vmesnik je prisoten v paketu java.util in vsebuje 2 metodi compare(Object obj1, Object obj2) in equals(Object element). Z uporabo primerjalnika lahko razvrstimo elemente glede na podatkovne člane. Na primer, lahko je na seznamu številka, ime, starost ali kar koli drugega.
Metoda razreda Collections za razvrščanje elementov seznama se uporablja za razvrščanje elementov seznama po podanem primerjalniku.
public void sort(List list, ComparatorClass c)>
Če želite razvrstiti dani seznam, mora ComparatorClass implementirati vmesnik Comparator.
Kako deluje metoda sort() razreda Collections?
Interno metoda Sort kliče metodo Compare razredov, ki jih razvršča. Za primerjavo dveh elementov se vpraša Kateri je večji? Metoda primerjave vrne -1, 0 ali 1, da pove, ali je manjša, enaka ali večja od druge. Ta rezultat uporabi za določitev, ali jih je treba zamenjati za njihovo vrsto.
Primer
Java
// Java Program to Demonstrate Working of> // Comparator Interface> // Importing required classes> import> java.io.*;> import> java.lang.*;> import> java.util.*;> // Class 1> // A class to represent a Student> class> Student {> >// Attributes of a student> >int> rollno;> >String name, address;> >// Constructor> >public> Student(>int> rollno, String name, String address)> >{> >// This keyword refers to current instance itself> >this>.rollno = rollno;> >this>.name = name;> >this>.address = address;> >}> >// Method of Student class> >// To print student details in main()> >public> String toString()> >{> >// Returning attributes of Student> >return> this>.rollno +>' '> +>this>.name +>' '> >+>this>.address;> >}> }> // Class 2> // Helper class implementing Comparator interface> class> Sortbyroll>implements> Comparator {> >// Method> >// Sorting in ascending order of roll number> >public> int> compare(Student a, Student b)> >{> >return> a.rollno - b.rollno;> >}> }> // Class 3> // Helper class implementing Comparator interface> class> Sortbyname>implements> Comparator {> >// Method> >// Sorting in ascending order of name> >public> int> compare(Student a, Student b)> >{> >return> a.name.compareTo(b.name);> >}> }> // Class 4> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating an empty ArrayList of Student type> >ArrayList ar =>new> ArrayList();> >// Adding entries in above List> >// using add() method> >ar.add(>new> Student(>111>,>'Mayank'>,>'london'>));> >ar.add(>new> Student(>131>,>'Anshul'>,>'nyc'>));> >ar.add(>new> Student(>121>,>'Solanki'>,>'jaipur'>));> >ar.add(>new> Student(>101>,>'Aggarwal'>,>'Hongkong'>));> >// Display message on console for better readability> >System.out.println(>'Unsorted'>);> >// Iterating over entries to print them> >for> (>int> i =>0>; i System.out.println(ar.get(i)); // Sorting student entries by roll number Collections.sort(ar, new Sortbyroll()); // Display message on console for better readability System.out.println('
Sorted by rollno'); // Again iterating over entries to print them for (int i = 0; i System.out.println(ar.get(i)); // Sorting student entries by name Collections.sort(ar, new Sortbyname()); // Display message on console for better readability System.out.println('
Sorted by name'); // // Again iterating over entries to print them for (int i = 0; i System.out.println(ar.get(i)); } }> |
>
>Izhod
Unsorted 111 Mayank london 131 Anshul nyc 121 Solanki jaipur 101 Aggarwal Hongkong Sorted by rollno 101 Aggarwal Hongkong 111 Mayank london 121 Solanki jaipur 131 Anshul nyc Sorted by name 101 Aggarwal Hongkong 131 Anshul nyc 111 Mayank london 121 Solanki jaipur>
Če spremenite vrnjeno vrednost v metodi primerjave, lahko razvrstite v poljubnem vrstnem redu, kot želite, na primer: Za padajoči vrstni red samo spremenite položaj 'a' in 'b' v zgornji metodi primerjave.
Razvrsti zbirko po več kot enem polju
V prejšnjem primeru smo razpravljali o tem, kako razvrstiti seznam predmetov na podlagi enega samega polja z uporabo vmesnika Comparable in Comparator. Toda kaj, če imamo zahtevo za razvrščanje predmetov ArrayList v skladu z več kot enim poljem, kot je najprej, razvrsti glede na ime študenta in drugič, razvrsti glede na starost študenta.
Primer
Java
java arraylist razvrščen
// Java Program to Demonstrate Working of> // Comparator Interface Via More than One Field> // Importing required classes> import> java.util.ArrayList;> import> java.util.Collections;> import> java.util.Comparator;> import> java.util.Iterator;> import> java.util.List;> // Class 1> // Helper class representing a Student> class> Student {> >// Attributes of student> >String Name;> >int> Age;> >// Parameterized constructor> >public> Student(String Name, Integer Age)> >{> >// This keyword refers to current instance itself> >this>.Name = Name;> >this>.Age = Age;> >}> >// Getter setter methods> >public> String getName() {>return> Name; }> >public> void> setName(String Name) {>this>.Name = Name; }> >public> Integer getAge() {>return> Age; }> >public> void> setAge(Integer Age) {>this>.Age = Age; }> >// Method> >// Overriding toString() method> >@Override> public> String toString()> >{> >return> 'Customer{'> >+>'Name='> + Name +>', Age='> + Age +>'}'>;> >}> }> // Class 2> // Helper class implementing Comparator interface> class> CustomerSortingComparator> >implements> Comparator {> >// Method 1> >// To compare customers> >@Override> >public> int> compare(Student customer1, Student customer2)> >{> >// Comparing customers> >int> NameCompare = customer1.getName().compareTo(> >customer2.getName());> >int> AgeCompare = customer1.getAge().compareTo(> >customer2.getAge());> >// 2nd level comparison> >return> (NameCompare ==>0>) ? AgeCompare> >: NameCompare;> >}> }> // Method 2> // Main driver method> class> GFG {> >public> static> void> main(String[] args)> >{> >// Create an empty ArrayList> >// to store Student> >List al =>new> ArrayList();> >// Create customer objects> >// using constructor initialization> >Student obj1 =>new> Student(>'Ajay'>,>27>);> >Student obj2 =>new> Student(>'Sneha'>,>23>);> >Student obj3 =>new> Student(>'Simran'>,>37>);> >Student obj4 =>new> Student(>'Ajay'>,>22>);> >Student obj5 =>new> Student(>'Ajay'>,>29>);> >Student obj6 =>new> Student(>'Sneha'>,>22>);> >// Adding customer objects to ArrayList> >// using add() method> >al.add(obj1);> >al.add(obj2);> >al.add(obj3);> >al.add(obj4);> >al.add(obj5);> >al.add(obj6);> >// Iterating using Iterator> >// before Sorting ArrayList> >Iterator custIterator = al.iterator();> >// Display message> >System.out.println(>'Before Sorting:
'>);> >// Holds true till there is single element> >// remaining in List> >while> (custIterator.hasNext()) {> >// Iterating using next() method> >System.out.println(custIterator.next());> >}> >// Sorting using sort method of Collections class> >Collections.sort(al,> >new> CustomerSortingComparator());> >// Display message only> >System.out.println(>'
After Sorting:
'>);> >// Iterating using enhanced for-loop> >// after Sorting ArrayList> >for> (Student customer : al) {> >System.out.println(customer);> >}> >}> }> |
>
>Izhod
Before Sorting: Customer{Name=Ajay, Age=27} Customer{Name=Sneha, Age=23} Customer{Name=Simran, Age=37} Customer{Name=Ajay, Age=22} Customer{Name=Ajay, Age=29} Customer{Name=Sneha, Age=22} After Sorting: Customer{Name=Ajay, Age=22} Customer{Name=Ajay, Age=27} Customer{Name=Ajay, Age=29} Customer{Name=Simran, Age=37} Customer{Name=Sneha, Age=22} Customer{Name=Sneha, Age=23}>