Vergelijkbare interface wordt voornamelijk gebruikt om de arrays (of lijsten) van aangepaste objecten te sorteren.
Lijsten (en arrays) van objecten die een vergelijkbare interface implementeren, kunnen automatisch worden gesorteerd op Collections.sort (en Arrays.sort). Voordat we kijken hoe we een object van aangepaste objecten kunnen sorteren, laten we eerst kijken hoe we elementen van arrays en Wrapper-klassen kunnen sorteren die al Comparable implementeren.
Voorbeeld: Sorteerarrays en Wrapper-klasse
java.util.ArrayList importeren; import java.util.Arrays; import java.util.Collections; import java.util.List; public class demo { public static void main (String [] args) { / * * Integer-klasse implementeert vergelijkbaar * Interface zodat we de sorteermethode kunnen gebruiken * / int [] arr = {11,55,22,0,89}; Arrays.sort (arr); System.out.print ("Sorted Int Array:"); System.out.println (Arrays.toString (arr)); / * * String-klasse implementeert vergelijkbaar * Interface zodat we de sorteermethode kunnen gebruiken * / System.out.print ("Sorted String Array:"); String [] names = {"Steve", "Ajeet", "Kyle"}; Arrays.sort (namen); System.out.println (Arrays.toString (namen)); / * * String-klasse implementeert vergelijkbaar * Interface zodat we de sorteermethode kunnen gebruiken * / System.out.print ("Sorted List:"); Lijst fruit = nieuwe ArrayList (); fruits.add ( "Orange"); fruits.add ( "banaan"); fruits.add ( "Apple"); fruits.add ( "Guava"); fruits.add ( "druiven"); Collections.sort (fruit); voor (String s: fruits) System.out.print (s + ","); } }
Output:
Sorted Int Array: [0, 11, 22, 55, 89] Sorted String Array: [Ajeet, Kyle, Steve] Gesorteerde lijst: appel, banaan, druiven, guave, sinaasappel,
In het bovenstaande voorbeeld hebt u gezien dat hoe eenvoudig het is om de arrays en de lijst met objecten met een vergelijkbare interface te sorteren, u gewoon Collections.sort (en Arrays.sort) moet aanroepen.
Als u echter de objecten van aangepaste klasse wilt sorteren, moet u de vergelijkbare interface in onze aangepaste klasse implementeren.
Deze interface heeft slechts één methode die is:
public abstract int CompareTo (T obj)
Omdat deze methode abstract is, moet u deze methode in uw klas implementeren als u de vergelijkbare interface implementeert.
Laten we een voorbeeld nemen om dit beter te begrijpen:
Voorbeeld: Sorteren van een aangepast object door een vergelijkbare interface te implementeren
Zoals je kunt zien, heb ik de vergelijkbare interface in mijn klasse Author
geïmplementeerd omdat ik de objecten van deze klasse wil sorteren. Ik heb de logica van het sorteren in de methode comparTo () geschreven, je kunt logica schrijven op basis van de vereiste. Ik wilde de auteursnamen op achternaam eerst sorteren en als de achternaam hetzelfde is dan op voornaam. Als u alleen op achternaam wilt sorteren, is de eerste regel in de methode CompareTo () voldoende.
Auteur klasse
public class Author implementeert Vergelijkbare <Author> { String voornaam; String achternaam; String bookName; Auteur (String first, String last, String book) { this.firstName = first; this.lastName = last; this.bookName = boek; } @ Override / ** Hier schrijven we de logica om te sorteren. Deze methode sorteert * automatisch bij de voornaam voor het geval dat de achternaam is * hetzelfde.* / public int CompareTo (Author au) { / ** Sorteren op achternaam. CompareTo moet <0 retourneren als dit (trefwoord)* wordt verondersteld kleiner te zijn dan au,> 0 als dit zou moeten zijn* groter dan object au en 0 als ze geacht worden gelijk te zijn. * / int last = this.lastName.compareTo (au.lastName); // Sorteren op voornaam als achternaam hetzelfde is d laatste terug == 0? this.firstName.compareTo (au.firstName): last; } }
Sorteerklasse: SortAuthByNames
java.util.ArrayList importeren;import java.util.Collections; openbare klasse SortAuthByNames { public static void main (String args []) { // Lijst met objecten van auteursklasse ArrayList <Author> al = new ArrayList <Author> ();al.add (nieuwe auteur ("Henry", "Miller", "Tropic of Cancer")); al.add (nieuwe auteur ("Nalo", "Hopkinson", "Brown Girl in the Ring")); al.add (nieuwe auteur ("Frank", "Miller", "300")); al.add (nieuwe auteur ("Deborah", "Hopkinson", "Sky Boys")); al.add (nieuwe auteur ("George RR", "Martin", "Song of Ice and Fire")); / ** De lijst sorteren met behulp van de methode Collections.sort (), we* kan deze methode gebruiken omdat we de * Vergelijkbare interface in onze door de gebruiker gedefinieerde klasse Author* / Collections.sort (al); voor (Auteur str: al) { System.out.println (str.firstName + "" + str.lastName + "" + "Boek:" + str.bookName); } } }
Output:
Deborah Hopkinson Book: Sky Boys Nalo Hopkinson Book: Brown Girl in the Ring George RR Martin Book: A Song of Ice and Fire Frank Miller Boek: 300 Henry Miller Book: Tropic of Cancer
Opmerking: we moeten de methode comparTo () zo schrijven dat als dit (ik verwijs hiernaar het trefwoord this) minder is dan het doorgegeven object, dit negatief moet zijn, indien groter dan positief en nul als gelijk.
Je vraagt je misschien af waarom ik die logica niet heb geschreven? Omdat voornaam en achternaam tekenreeksen zijn, heb ik de methode comparTo () van tekenreeksklasse genoemd , die precies hetzelfde doet.
Als de dingen die we vergelijken van een ander type zijn, zoals int, kunt u de logica als volgt schrijven:
Laten we zeggen dat het object van de klasse Employee (empId, empName, empAge) is en we willen de objecten sorteren op empAge
.
public int CompareTo (Employee e) { if (== this.empAge e.empAge) terugkeer 0; anders if (this.empAge> e.empAge) terugkeer 1; anders rendement -1; }
of
public int CompareTo (Employee e) { return this.empAge> e.empAge? 1: this.empAge <e.empAge? -1: 0; }
Laat een reactie achter