comparable comparator interfaces java
In deze tutorial wordt het concept van vergelijkbare en vergelijkende interfaces in Java met voorbeelden uitgelegd. Je leert ook over de verschillen tussen de twee:
We hebben alles over interfaces geleerd in onze eerdere tutorials. Een interface wordt gebruikt om abstracte methoden en statische of definitieve variabelen te declareren. Standaard zijn interfacemethoden openbaar. Sinds Java 8 kunnen interfaces ook statische en standaardmethoden bevatten.
Java biedt verschillende ingebouwde interfaces die we kunnen gebruiken om verschillende bewerkingen uit te voeren. In deze tutorial zullen we twee van dergelijke interfaces bespreken, namelijk Comparable en Comparator. Een vergelijkbare interface wordt gebruikt voor het sorteren van objecten volgens de natuurlijke volgorde. De vergelijkingsinterface wordt gebruikt om individuele attributen van verschillende objecten te sorteren.
Ontdek hier de eenvoudige Java-trainingsserie.
Laten we beginnen met een vergelijkbare interface.
Wat je leert:
- Vergelijkbare interface in Java
- Vergelijkingsinterface in Java
- Verschil tussen vergelijkbare versus comparator
- Gevolgtrekking
Vergelijkbare interface in Java
Een vergelijkbare interface sorteert de lijststructuren zoals Arrays en ArrayLists met aangepaste objecten. Zodra de lijstobjecten de vergelijkbare interface implementeren, kunnen we de methode Collections.sort () of Arrays.sort () gebruiken in het geval van de arrays om de inhoud te sorteren.
Maar als we aangepaste klassen hebben en we hun objecten moeten sorteren, dan zullen we de vergelijkbare interface in deze klasse moeten implementeren. De vergelijkbare interface is een onderdeel van de java.lang pakket. Deze interface heeft maar één methode, CompareTo (). Met een vergelijkbare interface kunnen we een enkel gegevenslid tegelijk sorteren.
Bijvoorbeeld, als we naam en leeftijd als velden in onze klas hebben, kunnen we de klassenobjecten op naam of leeftijd sorteren. We kunnen niet tegelijkertijd sorteren op naam en leeftijd.
Zoals hierboven uitgelegd, kunnen we de vergelijkbare interface in Java implementeren door een aangepaste klasse te hebben om de vergelijkbare interface te implementeren. De vergelijkbare interface heeft slechts één methode ‘vergelijk naar’ die moet worden overschreven in de klasse om de aangepaste objecten te sorteren.
‘CompareTo’ -methode
De methode ‘CompareTo’ van de vergelijkbare interface wordt gebruikt om het huidige object te vergelijken met het gegeven object. De algemene syntaxis van het object CompareTo wordt hieronder gegeven.
public int CompareTo (Object obj)
Zoals hierboven getoond, accepteert de methode CompareTo een object als een argument (het kan elk aangepast object zijn) en vergelijkt het met het huidige object dat wordt gebruikt om deze methode aan te roepen.
De methode CompareTo retourneert een geheel getal dat een van de volgende waarden kan hebben:
- Positief (> 0) geheel getal => het huidige object> de objectparameter is doorgegeven.
- Negatief (het huidige object
- Nul (= 0) => het huidige object en het opgegeven object zijn beide gelijk.
We kunnen de methode CompareTo () gebruiken om te sorteren:
- String-type objecten
- Wrapper class-objecten
- Door de gebruiker gedefinieerde of aangepaste objecten
Laten we nu een voorbeeld van een vergelijkbare interface implementeren.
Vergelijkbaar interfacevoorbeeld
Het volgende Java-programma implementeert een Person-klasse die naam en leeftijd als ledenvelden bevat. Deze klasse implementeert een ‘vergelijkbare’ interface waarmee we het object van klasse Persoon kunnen sorteren.
Merk op dat aangezien we aangepaste objecten gaan sorteren, we de ‘CompareTo ()’ - methode van de vergelijkbare interface moeten overschrijven.
waarmee bin-bestanden te openen
Binnen de overschreven methode CompareTo () vergelijken we de ouderdom van het passerende person-object met die van het huidige object en geven we dienovereenkomstig de waarde terug.
Een voorbeeld van een Java-programma wordt hieronder gegeven.
Uitgang:
Zoals blijkt uit de uitvoer, gebruiken we een vergelijkbare interface om twee objecten van de klasse Persoon te vergelijken op basis van de variabele leeftijdslid.
Zoals de naam suggereert, stelt een vergelijkbare interface ons in staat om het ene object met het andere te vergelijken, op voorwaarde dat de objecten van hetzelfde type zijn. Zolang de objecten zichzelf kunnen rangschikken, kunnen we de objecten gemakkelijk sorteren met de enige methode ‘CompareTo ()’ die bij deze interface hoort.
Java String CompareTo () - methode
We kunnen ook de methode CompareTo () gebruiken om twee String-type objecten in Java te vergelijken. De twee string-objecten worden lexicografisch vergeleken door elk teken van het string-object om te zetten in het equivalente Unicode-teken.
Als twee strings gelijk zijn, wordt 0 geretourneerd. Als het eerste object groter is dan het tweede object, wordt een positieve waarde geretourneerd en wordt een negatieve waarde geretourneerd als het eerste string-object kleiner is dan het tweede String-object.
Bijvoorbeeld,
string1.compareTo (string2) zal string1 en string 2 lexicografisch vergelijken.
Uitgang:
In het bovenstaande programma hebben we gezien hoe we de methode CompareTo () kunnen gebruiken om twee strings te vergelijken. Voordien hebben we de methode CompareTo () gebruikt om de gehele waarden te vergelijken (bijvoorbeeld leeftijd). Op dezelfde manier kunnen we de andere gegevenstypen zoals dubbels gebruiken met de methode CompareTo ().
Laten we nu verder gaan met de Comparator-interface in Java.
Vergelijkingsinterface in Java
We hebben de werking van de vergelijkbare interface al gezien. De vergelijkbare interface stelt ons in staat om aangepaste objecten te sorteren op basis van een enkel gegevenslid. Maar wanneer de vereiste zich voordoet om het object te sorteren op basis van meerdere velden of data-leden, dan kunnen we kiezen voor een Comparator-interface.
Met de Comparator-interface kunnen we meer dan één comparator maken, afhankelijk van het aantal velden dat we willen gebruiken om de aangepaste objecten te sorteren. Als we de vergelijkingsinterface gebruiken, stel dat we het aangepaste object willen sorteren op twee ledenvelden naam en leeftijd, dan hebben we twee vergelijkers nodig, één voor naam en één voor leeftijd.
Vervolgens kunnen we de methode Collections.sort () aanroepen met deze vergelijkers.
Dus hoe kunnen we de vergelijkers precies schrijven?
Beschouw een voorbeeld van een klasstudent met naam en leeftijd als vakgebied. Bedenk dat we Student-objecten willen sorteren op naam- en leeftijdsvelden.
Hiervoor zullen we eerst Comparator-klassen, StudentAgeComparator en StudenNameComparator moeten schrijven. In deze klassen zullen we de methode Compare () van de Comparator-interface overschrijven, en dan zullen we de methode Collections.sort aanroepen met elk van deze comparators om leerlingobjecten te sorteren.
De comparator-interface bevat een ‘vergelijk’ -object dat wordt gebruikt om objecten van twee verschillende klassen te vergelijken. De algemene syntaxis van de vergelijkingsmethode is:
public int vergelijken (Object obj1, Object obj2);
De vergelijkingsmethode vergelijkt obj1 met obj2.
De Comparator-interface is een onderdeel van de java.util pakket en los van de vergelijkingsmethode; het bevat ook een andere methode met de naam is gelijk aan.
Voorbeeld Java Comparator
Laten we een Comparator-voorbeeld in Java implementeren. We hebben weer een Student-klas gevolgd met naam en leeftijd als gegevensleden. Vervolgens definiëren we een vergelijkingsklasse AgeComparator die de vergelijkingsmethode overschrijft om leeftijden van twee leerlingen te vergelijken en de juiste waarden te retourneren.
In de hoofdmethode maken we een Arraylist van Student-objecten. Vervolgens noemen we de methode Collections.sort met ArrayList en het AgeComparator-object als argumenten. Dit sorteert de Student-objecten op leeftijd.
Het Java-programma dat dit scenario implementeert, wordt hieronder gegeven.
Uitgang:
In het bovenstaande programma, vergelijkbaar met de manier waarop we AgeComparator hebben geschreven om de Student-objecten te sorteren op basis van Leeftijd, kunnen we ook een andere NameComparator schrijven om de Student-objecten te sorteren op basis van het naamveld.
Op deze manier kunnen we zoveel Comparator-klassen hebben als nodig is om objecten in verschillende velden te sorteren. De manier waarop we twee int-variabelen vergeleken, kunnen we ook variabelen van de andere gegevenstypen vergelijken met behulp van de Compare-methode.
Verschil tussen vergelijkbare versus comparator
Vergelijkbare interface | Vergelijkingsinterface |
---|---|
Gebruikt Collections.sort (List) om elementen te sorteren. | Gebruikt Collections.sort (List, Comparator) om de elementen te sorteren. |
De vergelijkbare interface biedt sortering in één veld. | Comparator-interface biedt sortering van meerdere velden. |
Vergelijkbare interface sorteert objecten volgens natuurlijke ordening. | Comparator-interface sorteert verschillende attributen van verschillende objecten. |
Met een vergelijkbare interface kunnen we het huidige object ‘this’ vergelijken met het opgegeven object. | Met behulp van een vergelijkingsinterface kunnen we objecten van verschillende klassen vergelijken. |
Onderdeel van het java.lang-pakket. | Onderdeel van het java.util-pakket. |
Het gebruik van een vergelijkbare interface wijzigt de feitelijke klasse. | Comparator verandert de oorspronkelijke klasse niet. |
Biedt de methode CompareTo () om elementen te sorteren. | Biedt de methode Compare () om elementen te sorteren. |
Veel Gestelde Vragen
V # 1) Is vergelijkbaar een functionele interface?
Antwoord: Ja, vergelijkbaar is een functionele interface. Het declareert een enkele abstracte methode, CompareTo ().
Q # 2) Hoe maak je een klas vergelijkbaar?
Antwoord: We maken een klasse vergelijkbaar door de vergelijkbare interface te implementeren. Binnen de klasse overschrijven we de methode CompareTo () om het object te sorteren. We passeren een object en vergelijken het met het huidige object.
De methode CompareTo () retourneert 0 als twee objecten gelijk zijn. Het retourneert een negatief getal als het eerste object kleiner is dan het tweede en positief als het eerste object groter is dan het tweede object.
V # 3) Wat is het belangrijkste doel van de Comparator-interface?
Antwoord: De vergelijkingsinterface wordt voornamelijk gebruikt om de aangepaste objecten te sorteren. Een vergelijkingsinterface kan ook worden gebruikt om objecten van verschillende klassen te vergelijken. De vergelijkingsinterface kan ook worden gebruikt om objecten in meerdere velden te sorteren.
V # 4) Waarom wordt Comparator gebruikt in Java?
Antwoord: De vergelijkingsinterface wordt voornamelijk gebruikt wanneer we een andere sorteervolgorde willen voor onze aangepaste objecten, anders dan de natuurlijke volgorde op basis van meerdere velden.
V # 5) Wat implementeert de vergelijkbare interface?
Antwoord: Vergelijkbare interface wordt geïmplementeerd door alle wrapper-klassen en String-klasse. Aangepaste objecten gebruiken ook de vergelijkbare interface om te sorteren.
Gevolgtrekking
In deze tutorial hebben we vergelijkbare en comparator-interfaces in Java besproken. Een vergelijkbare interface wordt gebruikt om de objecten volgens natuurlijke ordening te sorteren en kan de objecten slechts op één veld sorteren.
De vergelijkbare interface heeft een methode ‘CompareTo ()’ die moet worden overschreven in de klasse die de Comparator-interface implementeert en waarvan de objecten moeten worden gesorteerd.
De vergelijkingsinterface wordt gebruikt om aangepaste objecten te sorteren die moeten worden gesorteerd op basis van een andere volgorde. De comparator-interface stelt ons ook in staat om objecten van twee verschillende klassen te sorteren op basis van meerdere velden.
Lees de Easy Java Training Series door.
Aanbevolen literatuur
- Java-interface en abstracte les met voorbeelden
- Set-interface in Java: Java-zelfstudie met voorbeelden
- Java-implementatie: creatie en uitvoering van Java JAR-bestand
- Java Basics: Java Syntax, Java Class en Core Java Concepts
- Java Virtual Machine: hoe JVM helpt bij het uitvoeren van Java-applicaties
- ListIterator-interface in Java met voorbeelden
- Array van objecten in Java: maken, initialiseren en gebruiken
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials