Sammenlignelig vs Comparator i Java

Nรธgleforskel mellem sammenlignelig og komparator i Java

  • Sammenlignes i Java er et objekt til at sammenligne sig selv med et andet objekt, hvorimod Comparator er et objekt til at sammenligne forskellige objekter af forskellige klasser.
  • Sammenlignelige giver compareTo() metode til at sortere elementer i Java, hvorimod Comparator giver compare() metode til at sortere elementer i Java.
  • En sammenlignelig grรฆnseflade er til stede i java.lang pakke, hvorimod Comparator-grรฆnsefladen er til stede i java.util pakke.
  • Sammenlignelig giver en enkelt sorteringssekvens, mens Comparator giver flere sorteringssekvenser.
  • Sammenlignelig pรฅvirker den originale klasse, hvorimod Comparator ikke pรฅvirker den originale klasse.

Forskellen mellem sammenlignelig og komparator
Forskellen mellem sammenlignelig og komparator

Her har jeg analyseret forskellen mellem sammenlignelig og Comparator og vil grundigt evaluere deres fordele og ulemper.

Hvad er sammenligneligt i Java?

Sammenlignelig in Java er et objekt, der sammenligner sig med et andet objekt. Det hjรฆlper med at sortere listen over brugerdefinerede objekter. De Java.lang.Den sammenlignelige grรฆnseflade bรธr implementeres af en klasse for at sammenligne dens forekomster. En rรฆkke objekter, der implementerer en sammenlignelig grรฆnseflade, sorteres automatisk efter Arrays.sort og Collections.sort metoder.

Metode brugt i Comparable

Jeg vil gerne fremhรฆve en vigtig metode, som jeg ofte bruger i den sammenlignelige grรฆnseflade:

Sammenligne med():

CompareTo() metoden bruges til at udfรธre naturlig sortering pรฅ en streng. Betydningen af โ€‹โ€‹naturlig sortering er den sorteringsrรฆkkefรธlge, der gรฆlder for objektet, fx numerisk rรฆkkefรธlge til sortering af heltal, alfabetisk rรฆkkefรธlge for streng osv.

Syntaksen for CompareTo() metoden er som fรธlger:

int compareTo(T obj)

I ovenstรฅende syntaks angiver T den type objekter, du vil sammenligne.

CompareTo() metode sammenligner objektet med T obj.

Output:

  • Det returnerer 0, hvis vรฆrdierne er ens.
  • Hvis objektet har en lavere vรฆrdi, returnerer denne metode en negativ vรฆrdi.
  • Hvis objektet har en hรธjere vรฆrdi, returnerer det en positiv vรฆrdi.

Et eksempel pรฅ sammenlignelig i Java

Fรธlgende program af Java sammenligneligt eksempel viser sammenligningen af โ€‹โ€‹to tegn, "a" og "b". Tegnet "a" kommer alfabetisk foran "b".

Derfor er outputtet -1. Tegnet "b" kommer efter "a" alfabetisk. Derfor er outputtet 1. Tegnene "a" og "b" er begge รฆkvivalente. Derfor er outputtet 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"));
    }
}

Produktion

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

Hvad er en komparator i Java?

En komparator in Java er et objekt til at sammenligne forskellige objekter af forskellige klasser. Komparatorgrรฆnsefladen i Java bruges ogsรฅ til at arrangere objekterne i brugerdefinerede klasser. Det inkluderer to vigtige komparatorgrรฆnseflademetoder kendt som sammenligning (Object obj1, Object obj2) og equals (Object element).

Metode brugt i Comparator

I min praksis stoler jeg ofte pรฅ fรธlgende kritiske metoder til komparatorgrรฆnsefladen:

Sammenligne():

Compare() giver dig mulighed for at bestille objekter. For at gรธre dette skal du oprette en klasse, der implementerer en komparatorgrรฆnseflade. Herefter skal du tilsidesรฆtte dens sammenligningsmetode.

Syntaksen af compare() metoden er som fรธlger:

compare(Object obj1, Object obj2)

I ovenstรฅende syntaks er obj1 og obj2 to objekter, som du skal sammenligne med compare()-metoden. compare() fremgangsmรฅde.

Output:

  • Det returnerer et negativt heltal, hvis det fรธrste argument er mindre end det andet.
  • Returnerer nul, hvis det fรธrste argument og det andet argument er ens.
  • Denne metode kan returnere et positivt heltal i tilfรฆlde af, at det fรธrste argument er stรธrre end det andet.

Du skal sikre, at relationen er transitiv. For eksempel ((sammenlign(a, b)>0) && (sammenlign(b, c)>0)), hvilket indebรฆrer sammenligne(a, c)>0.

Et eksempel pรฅ sammenlignelig i Java

I nedenstรฅende Java sammenligningseksempel, der er 6 variabler. "x", "y", "p", "q", "r" og "s". Outputtet er -1, da vรฆrdien af โ€‹โ€‹"x", 20 er mindre end vรฆrdien af โ€‹โ€‹"y", 30. Outputtet er 0, fordi vรฆrdien af โ€‹โ€‹"p", 40 er lig med vรฆrdien af โ€‹โ€‹"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

Lige med():

Equals() verificerer, om nummerobjektet er lig med objektet, som sendes som et argument eller ej.

Syntaksen af equals() metoden er som fรธlger:

public boolean equals(Object o)

Denne metode tager to parametre: 1) ethvert objekt og 2) en returvรฆrdi. Det returnerer sandt, hvis det bestรฅede argument ikke er null og er et objekt af en lignende type med samme numeriske vรฆrdi.

Equals-metodeeksempel:

I nedenstรฅende eksempel vil jeg sammenligne de fire variabler med hinanden. Tre variable er af typen heltal, og en er af typen kort. Det fรธrste resultat er falsk, da vรฆrdien af โ€‹โ€‹p, som er 5, ikke er lig med vรฆrdien af โ€‹โ€‹q, som er 20.

Det andet resultat er sandt, fordi vรฆrdien af โ€‹โ€‹variablene p og r er den samme, hvilket er 5. Endelig er outputtet falsk, da variablene p og s har forskellige tildelte vรฆrdier.

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));
   }
}

Produktion

false
true
false

Forskelle mellem Comparable og Comparator i Java

Jeg ser ofte forvirring mellem Java Sammenlignelig og Comparator; her er den vigtigste forskel:

Forskellen mellem Comparable og Comparator i Java
Forskellen mellem Comparable og Comparator i Java

Sammenligningsgrundlag Sammenlignelig komparator
Metode Sammenlignelige giver compareTo() metode til at sortere elementer i Java. Komparator giver compare() metode til at sortere elementer i Java.
Pakke En sammenlignelig grรฆnseflade er til stede i java.lang pakke. En komparatorgrรฆnseflade er til stede i java.util pakke.
Sorterings logik Sorteringslogikken skal vรฆre i samme klasse som det objekt, du skal sortere. Logikken ved sortering bรธr vรฆre i separate klasser for at skrive forskellige sorter baseret pรฅ forskellige attributter af objekter.
Klasseobjekt Klassen, hvis objekter du vil sortere, skal implementere Comparable-grรฆnsefladen. En klasse, hvis objekter du vil sortere, behรธver ikke at implementere en komparatorgrรฆnseflade.
Sortering af sekvenser Det giver enkelte sorteringssekvenser. Det giver flere sorteringssekvenser.
Sorteringsrรฆkkefรธlge Denne metode kan sortere dataene efter den naturlige sorteringsrรฆkkefรธlge. Denne metode sorterer dataene i henhold til den tilpassede sorteringsrรฆkkefรธlge.
Klasse Det pรฅvirker den oprindelige klasse. dvs. den faktiske klasse รฆndres. Det pรฅvirker ikke den oprindelige klasse, dvs. den faktiske klasse รฆndres ikke.
Brug Implementeret ofte i API'et af kalender, Wrapper-klasser, dato og
Snor.
Det er implementeret til at sortere forekomster af tredjepartsklasser.
Implement Alle indpakningsklasser og strengklasser implementerer sammenlignelige grรฆnseflader. De eneste implementerede klasser af Comparator er Collator og RuleBasedColator.

Bedste praksis, mens du bruger komparator og sammenlignelig i Java

  • Brug en sammenlignelig grรฆnseflade, nรฅr sammenligningen er standard for den specifikke klasse.
  • Du kan bruge lambdaer med en komparator.
  • Mange af de tilgรฆngelige kerneklasser implementerer en sammenlignelig grรฆnseflade.
  • Det er muligt at bruge TreeSet og TreeMap, mens du sorterer Set eller Map.
  • compareTo() metoden fungerer med komparator sรฅvel som sammenlignelig.
  • Brug kun komparatorgrรฆnsefladen, nรฅr du < krรฆver mere fleksibilitet.
  • compareTo() metoden returnerer et positivt heltal, hvis det fรธrste objekt er stรธrre end det andet, negativt, hvis det er lavere, og nul, hvis begge er ens.

Sรฅdan vรฆlger du mellem en sammenlignelig og en komparator

Afslutningsvis tyder min praktiske erfaring pรฅ, at udnyttelse af Comparable og Comparator i Java lรธfter markant den kontrol, vi har over datasortering, hvilket forbedrer bรฅde ydeevne og funktionalitet.

Opsummer dette indlรฆg med: