Salīdzinājuma interfeiss tiek izmantots, lai sakārtotu lietotāja definētu klašu objektus. Salīdzinājuma objekts spēj salīdzināt divus vienas klases objektus . Sekojošā funkcija salīdziniet obj1 ar obj2.
Sintakse:
public int compare(Object obj1, Object obj2):>
Pieņemsim, ka mums ir mūsu pašu klases tipa masīvs/masīvu saraksts, kurā ir tādi lauki kā roll nr, nosaukums, adrese, DOB utt., un mums ir jākārto masīvs, pamatojoties uz Roll nr vai nosaukumu?
1. metode : Viena acīmredzama pieeja ir rakstīt savu sort() funkciju, izmantojot kādu no standarta algoritmiem. Šim risinājumam ir jāpārraksta viss šķirošanas kods dažādiem kritērijiem, piemēram, ruļļa Nr. un nosaukumam.
pavasara mākonis
2. metode: Salīdzinājuma interfeisa izmantošana - Salīdzinājuma interfeiss tiek izmantots, lai sakārtotu lietotāja definētas klases objektus. Šis interfeiss atrodas java.util pakotnē, un tajā ir 2 metodes, lai salīdzinātu (Object obj1, Object obj2) un vienāds (Object elements). Izmantojot salīdzinājumu, mēs varam kārtot elementus, pamatojoties uz datu dalībniekiem. Piemēram, tas var būt sarakstā Nr., Vārds, vecums vai jebkas cits.
Method of Collections klase kārtošanai List elementi tiek izmantota, lai kārtotu List elementus pēc dotā salīdzinājuma.
public void sort(List list, ComparatorClass c)>
Lai kārtotu doto sarakstu, ComparatorClass ir jāievieš Comparator interfeiss.
Kā darbojas klases kolekcijas metode sort()?
Iekšēji kārtošanas metode izsauc šķirojošo klašu salīdzināšanas metodi. Lai salīdzinātu divus elementus, tiek jautāts, kurš ir lielāks? Salīdzināšanas metode atgriež -1, 0 vai 1, lai noteiktu, vai tā ir mazāka, vienāda vai lielāka ar otru. Tas izmanto šo rezultātu, lai pēc tam noteiktu, vai tie ir jāmaina pret to veidu.
Piemērs
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)); } }> |
>
>Izvade
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>
Mainot atgriešanas vērtību salīdzināšanas metodē, varat kārtot jebkurā secībā, ko vēlaties, piemēram: dilstošā secībā vienkārši mainiet “a” un “b” pozīcijas iepriekš minētajā salīdzināšanas metodē.
Kārtot kolekciju pēc vairākiem laukiem
Iepriekšējā piemērā mēs apspriedām, kā kārtot objektu sarakstu, pamatojoties uz vienu lauku, izmantojot saskarni Comparable un Comparator. Bet, ja mums ir prasība kārtot ArrayList objektus saskaņā ar vairāk nekā vienu lauku, piemēram, pirmkārt, kārtot pēc skolēna vārda un, otrkārt, kārtot pēc skolēna vecuma.
Piemērs
Java
// 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);> >}> >}> }> |
>
kas ir Linux failu sistēma
>Izvade
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}>