Vertailun käyttöliittymää käytetään käyttäjän määrittämien luokkien objektien järjestämiseen. Vertailuobjekti pystyy vertaamaan kahta saman luokan objektia . Seuraava funktio vertaa obj1:tä obj2:een.
Syntaksi:
public int compare(Object obj1, Object obj2):>
Oletetaan, että meillä on oman luokkamme Array/ArrayList, joka sisältää kenttiä, kuten rullan nro, nimi, osoite, DOB jne., ja meidän on lajiteltava taulukko rullan numeron tai nimen perusteella?
Menetelmä 1 : Yksi ilmeinen tapa on kirjoittaa oma sort()-funktio käyttämällä jotakin vakioalgoritmeista. Tämä ratkaisu edellyttää koko lajittelukoodin uudelleenkirjoittamista eri kriteereille, kuten rullan numero ja nimi.
onclick js
Tapa 2: Comparator-rajapinnan käyttö - Comparator-liittymää käytetään käyttäjän määrittämän luokan objektien järjestämiseen. Tämä käyttöliittymä on java.util-paketissa ja sisältää 2 menetelmää vertaa (Object obj1, Object obj2) ja equals (Object element). Vertailun avulla voimme lajitella elementit datajäsenten perusteella. Se voi olla esimerkiksi rullan numerossa, nimessä, iässä tai muussa.
Method of Collections -luokkaa List elementtien lajitteluun käytetään lajittelemaan Listan elementit annetun vertailijan mukaan.
public void sort(List list, ComparatorClass c)>
Tietyn listan lajittelemiseksi ComparatorClassin on otettava käyttöön Comparator-liitäntä.
Miten Kokoelmat-luokan sort()-menetelmä toimii?
Sisäisesti lajittelumenetelmä kutsuu lajittelemiensa luokkien Vertaa-menetelmää. Kahden elementin vertaamiseksi se kysyy kumpi on suurempi? Vertaa-metodi palauttaa arvon -1, 0 tai 1 kertoakseen, onko se pienempi, yhtä suuri vai suurempi kuin toinen. Se käyttää tätä tulosta määrittääkseen, pitäisikö ne vaihtaa niiden lajikkeisiin.
Esimerkki
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)); } }> |
>
>Lähtö
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>
Muutamalla palautusarvoa vertailumenetelmän sisällä, voit lajitella haluamaasi järjestykseen, esimerkiksi: Laskevassa järjestyksessä muuta vain 'a' ja 'b':n paikkaa yllä olevassa vertailumenetelmässä.
Lajittele kokoelma useamman kuin yhden kentän mukaan
Edellisessä esimerkissä olemme käsitelleet objektiluettelon lajittelua yhden kentän perusteella käyttämällä Comparable- ja Comparator-käyttöliittymää. Mutta entä jos meillä on vaatimus lajitella ArrayList-objektit useamman kuin yhden kentän mukaan, kuten ensin, lajittele opiskelijan nimen mukaan ja toiseksi lajittele opiskelijan iän mukaan.
Esimerkki
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);> >}> >}> }> |
>
kuinka päivittää javassa
>Lähtö
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}>