Palyginimo sąsaja naudojama vartotojo apibrėžtų klasių objektams rūšiuoti. Lyginamasis objektas gali palyginti du tos pačios klasės objektus . Šią funkciją palyginkite obj1 su obj2.
Sintaksė:
public int compare(Object obj1, Object obj2):>
Tarkime, kad turime savo klasės tipo masyvą / ArrayList, kuriame yra laukai, pvz., ritinio numeris, pavadinimas, adresas, DOB ir tt, ir mes turime rūšiuoti masyvą pagal ritinio numerį arba pavadinimą?
1 būdas : Vienas iš akivaizdžių būdų yra parašyti savo sort() funkciją naudojant vieną iš standartinių algoritmų. Šis sprendimas reikalauja perrašyti visą rūšiavimo kodą pagal skirtingus kriterijus, pvz., ritinio numerį ir pavadinimą.
stygos c
2 būdas: Palyginimo sąsajos naudojimas – Palyginimo sąsaja naudojama vartotojo apibrėžtos klasės objektams sutvarkyti. Ši sąsaja yra java.util pakete ir apima 2 palyginimo (Object obj1, Object obj2) ir equals (Object element) metodus. Naudodami lyginamąjį elementą galime rūšiuoti elementus pagal duomenų narius. Pavyzdžiui, jis gali būti nurodytas sąraše, pavardė, amžius ar dar kas nors.
Method of Collections klasė Sąrašo elementų rūšiavimui naudojama sąrašo elementams rūšiuoti pagal pateiktą komparatorių.
public void sort(List list, ComparatorClass c)>
Norėdami rūšiuoti nurodytą sąrašą, ComparatorClass turi įdiegti Comparator sąsają.
Kaip veikia kolekcijų klasės metodas sort()?
Viduje Rūšiavimo metodas iškviečia rūšiuojamų klasių palyginimo metodą. Norėdami palyginti du elementus, klausiama, kuris yra didesnis? Palyginimo metodas grąžina -1, 0 arba 1, kad nustatytų, ar jis yra mažesnis, lygus ar didesnis už kitą. Jis naudoja šį rezultatą, kad nustatytų, ar juos reikia pakeisti į jų rūšį.
Pavyzdys
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)); } }> |
>
>Išvestis
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>
Pakeitę grąžinimo vertę palyginimo metodu, galite rūšiuoti bet kokia norima tvarka, pavyzdžiui: mažėjančia tvarka tiesiog pakeiskite „a“ ir „b“ pozicijas aukščiau pateiktame palyginimo metode.
Rūšiuoti kolekciją pagal daugiau nei vieną lauką
Ankstesniame pavyzdyje aptarėme, kaip rūšiuoti objektų sąrašą pagal vieną lauką, naudojant sąsają Comparable ir Comparator, bet kas, jei turime reikalavimą rūšiuoti ArrayList objektus pagal daugiau nei vieną lauką, pavyzdžiui, pirma, rūšiuoti pagal mokinio vardą, antra, rūšiuoti pagal mokinio amžių.
Pavyzdys
Java
hrithik roshan amžius
// 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);> >}> >}> }> |
>
>Išvestis
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}>