Vergelijkbaar versus comparator in Java

Belangrijkste verschil tussen vergelijkbaar en comparator in Java

  • Vergelijkbaar in Java is een object om zichzelf te vergelijken met een ander object, terwijl Comparator een object is voor het vergelijken van verschillende objecten van verschillende klassen.
  • Vergelijkbaar biedt de compareTo() methode om elementen in te sorteren Java, terwijl Comparator de compare() methode om elementen in te sorteren Java.
  • Een vergelijkbare interface is aanwezig in java.lang pakket, terwijl de Comparator-interface aanwezig is in java.util pakket.
  • Comparable biedt één sorteervolgorde, terwijl Comparator meerdere sorteervolgordes biedt.
  • Vergelijkbaar heeft invloed op de oorspronkelijke klasse, terwijl Comparator geen invloed heeft op de oorspronkelijke klasse.

Verschil tussen vergelijkbaar en vergelijker
Verschil tussen vergelijkbaar en vergelijker

Hier heb ik het verschil tussen vergelijkbaar en Comparator geanalyseerd en zal ik de voor- en nadelen ervan uitgebreid evalueren.

Wat is vergelijkbaar in Java?

Vergelijkbaar in Java is een object dat zichzelf vergelijkt met een ander object. Het helpt om de lijst met aangepaste objecten te sorteren. De Java.lang.De vergelijkbare interface moet door een klasse worden geïmplementeerd om zijn instanties te vergelijken. Een array van objecten die een vergelijkbare interface implementeren, wordt automatisch gesorteerd op Arrays.sort en Collections.sort werkwijzen.

Methode gebruikt in Vergelijkbaar

Ik wil graag een belangrijke methode benadrukken die ik vaak gebruik in de Vergelijkbare interface:

Vergelijk met():

De CompareTo()-methode wordt gebruikt om natuurlijke sortering op een string uit te voeren. De betekenis van natuurlijke sortering is de sorteervolgorde die van toepassing is op het object, bijvoorbeeld numerieke volgorde voor het sorteren van gehele getallen, alfabetische volgorde voor String, etc.

De syntaxis van CompareTo() methode is als volgt:

int compareTo(T obj)

In de bovenstaande syntaxis betekent T het type objecten dat u gaat vergelijken.

CompareTo() methode vergelijkt het object met T obj.

Output:

  • Het retourneert 0 als de waarden gelijk zijn.
  • Als het object een lagere waarde heeft, retourneert deze methode een negatieve waarde.
  • Als het object een hogere waarde heeft, retourneert het een positieve waarde.

Een voorbeeld van vergelijkbaar in Java

Het volgende programma van Java Een vergelijkbaar voorbeeld toont de vergelijking van twee karakters, “a” en “b”. Het teken “a” komt alfabetisch vóór “b”.

Daarom is de uitvoer -1. Het teken “b” komt alfabetisch na “a”. De uitvoer is dus 1. De tekens “a” en “b” zijn beide gelijkwaardig. De uitvoer is dus 0.

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

uitgang

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

Waar zit een vergelijker in Java?

Een vergelijker in Java is een object voor het vergelijken van verschillende objecten van verschillende klassen. De vergelijkingsinterface in Java wordt ook gebruikt om de objecten van door de gebruiker gedefinieerde klassen te ordenen. Het bevat twee belangrijke vergelijkingsinterfacemethoden die bekend staan ​​als vergelijken (Object obj1, Object obj2) en gelijk aan (Object-element).

Methode gebruikt in Comparator

In mijn praktijk maak ik vaak gebruik van de volgende kritische methoden van de comparatorinterface:

Vergelijken():

Compare() maakt het mogelijk om objecten te bestellen. Om dit te doen, moet u een klasse maken die een comparatorinterface implementeert. Hierna moet u de vergelijkingsmethode overschrijven.

De syntaxis van de compare() methode is als volgt:

compare(Object obj1, Object obj2)

In de bovenstaande syntaxis zijn obj1 en obj2 twee objecten die u moet vergelijken met behulp van de Compare()-methode. compare() methode.

Output:

  • Het retourneert een negatief geheel getal als het eerste argument kleiner is dan het tweede.
  • Retourneert nul als het eerste argument en het tweede argument gelijk zijn.
  • Deze methode kan een positief geheel getal retourneren als het eerste argument groter is dan het tweede.

Je moet ervoor zorgen dat de relatie transitief is. Bijvoorbeeld ((vergelijk(a, b)>0) && (vergelijk(b, c)>0)) wat impliceert vergelijk(a, c)>0.

Een voorbeeld van vergelijkbaar in Java

In het onderstaande Java vergelijkingsvoorbeeld, er zijn er 6 variabelen. “x”, “y”, “p”, “q”, “r” en “s”. De uitvoer is -1 omdat de waarde van “x”, 20 kleiner is dan de waarde van “y”, 30. De uitvoer is 0 omdat de waarde van “p”, 40 gelijk is aan de waarde van “q”, 40 .

import java.lang.Integer; 
public class example { 
    public static void main(String args[]) 
    { 
        int x = 20; 
        int y = 30; 
        // as 10 less than 20, 
        // Output will be a value less than zero 
        System.out.println(Integer.compare(x, y)); 
        int p = 40; 
        int q = 40; 
        // as 30 equals 30, 
        // Output will be zero 
        System.out.println(Integer.compare(p, q)); 
        int r = 20; 
        int s = 7; 
        // as 15 is greater than 8, 
        // Output will be a value greater than zero 
        System.out.println(Integer.compare(r, s)); 
    } 
}

Output:

-1
0
1

Is gelijk aan():

Equals() verifieert of het getalobject gelijk is aan het object, dat als argument wordt doorgegeven, of niet.

De syntaxis van de equals() methode is als volgt:

public boolean equals(Object o)

Deze methode heeft twee parameters nodig: 1) elk object en 2) een retourwaarde. Het retourneert waar als het doorgegeven argument niet nul is en een object van een vergelijkbaar type is met dezelfde numerieke waarde.

Is gelijk aan methode Voorbeeld:

In het onderstaande voorbeeld vergelijk ik de vier variabelen met elkaar. Drie variabelen zijn van het type geheel getal, en één is van het type kort. Het eerste resultaat is onwaar omdat de waarde van p, die 5 is, niet gelijk is aan de waarde van q, die 20 is.

Het tweede resultaat is waar omdat de waarde van de variabelen p en r hetzelfde is, namelijk 5. Ten slotte is de uitvoer onwaar, omdat de variabelen p en s verschillende toegewezen waarden hebben.

public class Test { 
   public static void main(String args[]) {
      Integer p = 5;
      Integer q = 20;
      Integer r =5;
      Short s = 5;
      System.out.println(p.equals(q));  
      System.out.println(p.equals(r)); 
      System.out.println(p.equals(s));
   }
}

uitgang

false
true
false

Verschillen tussen vergelijkbaar en comparator in Java

Ik zie vaak verwarring tussen Java Vergelijkbaar en vergelijker; hier is het belangrijkste verschil:

Verschil tussen vergelijkbaar en comparator in Java
Verschil tussen vergelijkbaar en comparator in Java

Vergelijkingsbasis Vergelijkbaar Comparator
Methode Vergelijkbare aanbiedingen compareTo() methode om elementen in te sorteren Java. Vergelijker biedt compare() methode om elementen in te sorteren Java.
Pakket Een vergelijkbare interface is aanwezig in java.lang pakket. Er is een comparatorinterface aanwezig java.util pakket.
Logica van sorteren De logica van het sorteren moet in dezelfde klasse liggen als het object dat u gaat sorteren. De logica van het sorteren zou in afzonderlijke klassen moeten plaatsvinden om verschillende soorten te schrijven op basis van verschillende attributen van objecten.
Klasse-object De klasse waarvan u de objecten wilt sorteren, moet de Comparable-interface implementeren. Een klasse waarvan u de objecten wilt sorteren, hoeft geen comparatorinterface te implementeren.
Sorteerreeksen Het biedt enkele sorteersequenties. Het biedt meerdere sorteervolgordes.
Sorteervolgorde Deze methode kan de gegevens sorteren volgens de natuurlijke sorteervolgorde. Deze methode sorteert de gegevens volgens de aangepaste sorteervolgorde.
Klasse Het beïnvloedt de oorspronkelijke klasse. dat wil zeggen, de feitelijke klasse wordt gewijzigd. Het heeft geen invloed op de oorspronkelijke klasse, dat wil zeggen dat de werkelijke klasse niet wordt gewijzigd.
Gebruik Regelmatig geïmplementeerd in de API door Agenda, Wrapper-klassen, Datum en
Draad.
Het is geïmplementeerd om instanties van klassen van derden te sorteren.
Implementeren Alle wrapperklassen en stringklassen implementeren vergelijkbare interfaces. De enige geïmplementeerde klassen van Comparator zijn Collator en RuleBasedColator.

Best practices bij het gebruik van Comparator en Comparable in Java

  • Gebruik een vergelijkbare interface als de vergelijking standaard is voor de specifieke klasse.
  • Je kunt lambda's gebruiken met een comparator.
  • Veel van de beschikbare kernklassen implementeren een vergelijkbare interface.
  • Het is mogelijk om TreeSet en TreeMap te gebruiken tijdens het sorteren van Set of Map.
  • De compareTo() methode werkt zowel met comparator als vergelijkbaar.
  • Gebruik de comparatorinterface alleen als u < meer flexibiliteit nodig heeft.
  • De compareTo() methode retourneert een positief geheel getal als het eerste object groter is dan het andere, negatief als het lager is, en nul als beide hetzelfde zijn.

Hoe u kunt kiezen tussen een vergelijkbaar exemplaar en een vergelijkingsmiddel

Kortom, mijn praktijkervaring suggereert dat het gebruik van Comparable en Comparator in Java vergroot de controle die we hebben over het sorteren van gegevens aanzienlijk, waardoor zowel de prestaties als de functionaliteit worden verbeterd.

Vat dit bericht samen met: