Srovnatelné vs Komparátor v Java

Klíčový rozdíl mezi srovnatelným a komparátorem v Java

  • Srovnatelné v Java je objekt pro porovnání s jiným objektem, zatímco Comparator je objekt pro porovnání různých objektů různých tříd.
  • Srovnatelné poskytuje compareTo() způsob řazení prvků Java, zatímco Comparator poskytuje compare() způsob řazení prvků Java.
  • Srovnatelné rozhraní je přítomno v java.lang balíček, zatímco rozhraní Comparator je přítomno v java.util balíček.
  • Comparable poskytuje jednu třídicí sekvenci, zatímco Comparator poskytuje více třídicích sekvencí.
  • Comparable ovlivňuje původní třídu, zatímco Comparator neovlivňuje původní třídu.

Rozdíl mezi srovnatelným a komparátorem
Rozdíl mezi srovnatelným a komparátorem

Zde jsem rozebral rozdíl mezi srovnatelným a komparátorem a komplexně zhodnotím jejich klady a zápory.

Co je srovnatelné v Java?

Srovnatelný in Java je objekt, který se srovnává s jiným objektem. Pomáhá seřadit seznam vlastních objektů. The Java.lang.Porovnatelné rozhraní by mělo být implementováno třídou, aby bylo možné porovnávat její instance. Pole objektů implementujících srovnatelné rozhraní se třídí automaticky podle Arrays.sort a Collections.sort metody.

Metoda použitá v Comparable

Rád bych zdůraznil důležitou metodu, kterou často používám v rozhraní Comparable:

Porovnat s():

Metoda CompareTo() se používá k přirozenému třídění řetězce. Význam přirozeného třídění je pořadí řazení, které platí pro objekt, např. číselné pořadí pro třídění celých čísel, abecední pořadí pro řetězec atd.

Syntaxe CompareTo() metoda je následující:

int compareTo(T obj)

Ve výše uvedené syntaxi T znamená typ objektů, které budete porovnávat.

CompareTo() metoda porovnává objekt s T obj.

Výstup:

  • Pokud jsou hodnoty stejné, vrátí 0.
  • Pokud má objekt nižší hodnotu, pak tato metoda vrátí zápornou hodnotu.
  • Pokud má objekt vyšší hodnotu, vrátí kladnou hodnotu.

Příklad srovnatelného v Java

Následující program Java srovnatelný příklad ukazuje srovnání dvou znaků, „a“ a „b“. Znak „a“ je před „b“ abecedně.

Proto je výstup -1. Znak „b“ následuje po „a“ abecedně. Výstup je tedy 1. Znaky „a“ ​​a „b“ jsou oba ekvivalentní. Výstup je tedy 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"));
    }
}

Výstup

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

V čem je komparátor Java?

Srovnávač in Java je objekt pro porovnávání různých objektů různých tříd. Rozhraní komparátoru v Java se také používá k uspořádání objektů uživatelsky definovaných tříd. Zahrnuje dvě důležité metody rozhraní komparátoru známé jako porovnat (Object obj1, Object obj2) a rovná se (Object element).

Metoda použitá v komparátoru

Ve své praxi se často spoléhám na následující kritické metody rozhraní komparátoru:

Porovnat():

Compare() umožňuje objednávat předměty. Chcete-li to provést, musíte vytvořit třídu, která implementuje rozhraní komparátoru. Poté musíte přepsat jeho metodu porovnání.

Syntaxe compare() metoda je následující:

compare(Object obj1, Object obj2)

Ve výše uvedené syntaxi jsou obj1 a obj2 dva objekty, které musíte porovnat pomocí metody Compare(). compare() metoda.

Výstup:

  • Vrátí záporné celé číslo, pokud je první argument menší než druhý.
  • Vrátí nulu, pokud se první argument a druhý argument rovnají.
  • Tato metoda může vrátit kladné celé číslo v případě, že první argument je větší než druhý.

Musíte zajistit, aby byl vztah tranzitivní. Například ((porovnat(a, b)>0) && (porovnat(b, c)>0)), což znamená porovnat(a, c)>0.

Příklad srovnatelného v Java

Níže Java srovnávací příklad, je jich 6 proměnné. „x“, „y“, „p“, „q“, „r“ a „s“. Výstup je -1 jako hodnota „x“, 20 je menší než hodnota „y“, 30. Výstup je 0, protože hodnota „p“, 40 se rovná hodnotě „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)); 
    } 
}

Výstup:

-1
0
1

Rovná se():

Equals() ověřuje, zda je objekt číslo roven objektu, který je předán jako argument, či nikoli.

Syntaxe equals() metoda je následující:

public boolean equals(Object o)

Tato metoda má dva parametry: 1) libovolný objekt a 2) návratovou hodnotu. Vrací hodnotu true, pokud předaný argument není null a jedná se o objekt podobného typu se stejnou číselnou hodnotou.

Příklad metody se rovná:

V níže uvedeném příkladu budu porovnávat čtyři proměnné mezi sebou. Tři proměnné jsou typu integer a jedna je typu short. První výsledek je nepravdivý, protože hodnota p, která je 5, se nerovná hodnotě q, která je 20.

Druhý výsledek je pravdivý, protože hodnota proměnných p a r je stejná, což je 5. Nakonec je výstup nepravdivý, protože proměnné p a s mají různé přiřazené hodnoty.

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

Výstup

false
true
false

Rozdíly mezi srovnatelným a komparátorem v Java

Často mezi nimi vidím zmatek Java Srovnatelné a srovnávací; zde je hlavní rozdíl:

Rozdíl mezi srovnatelným a komparátorem v Java
Rozdíl mezi srovnatelným a komparátorem v Java

Srovnávací základ Srovnatelný Komparátor
Metoda Srovnatelné nabídky compareTo() způsob řazení prvků Java. Komparátor poskytuje compare() způsob řazení prvků Java.
Balíček Srovnatelné rozhraní je přítomno v java.lang balíček. Je přítomno rozhraní komparátoru java.util balíček.
Logika řazení Logika řazení musí být ve stejné třídě jako objekt, který se chystáte třídit. Logika řazení by měla být v samostatných třídách, aby bylo možné zapisovat různá řazení na základě různých atributů objektů.
Objekt třídy Třída, jejíž objekty chcete třídit, musí implementovat rozhraní Comparable. Třída, jejíž objekty chcete třídit, nemusí implementovat rozhraní komparátoru.
Sekvence řazení Poskytuje jednotlivé sekvence řazení. Poskytuje několik třídicích sekvencí.
Pořadí řazení Tato metoda dokáže seřadit data podle přirozeného pořadí řazení. Tato metoda třídí data podle přizpůsobeného pořadí řazení.
Třída Ovlivňuje původní třídu. tj. skutečná třída je změněna. Nemá vliv na původní třídu, tj. skutečná třída se nezmění.
Používání Často implementováno v API podle kalendáře, tříd Wrapper, data a
Řetězec
Je implementován k řazení instancí tříd třetích stran.
Nářadí Všechny třídy obalů a třídy řetězců implementují srovnatelná rozhraní. Jediné implementované třídy Comparatoru jsou Collator a RuleBasedColator.

Osvědčené postupy při používání komparátoru a srovnatelného v Java

  • Pokud je srovnání standardní pro konkrétní třídu, použijte srovnatelné rozhraní.
  • Lambdy můžete použít s komparátorem.
  • Mnoho dostupných základních tříd implementuje srovnatelné rozhraní.
  • Je možné použít TreeSet a TreeMap při řazení Set nebo Map.
  • Jedno compareTo() metoda pracuje s komparátorem i srovnatelným.
  • Rozhraní komparátoru používejte pouze v případě, že < vyžadujete větší flexibilitu.
  • Jedno compareTo() metoda vrátí kladné celé číslo, pokud je první objekt větší než druhý, záporné, pokud je nižší, a nulu, pokud jsou oba stejné.

Jak si vybrat mezi srovnatelným a komparátorem

Mé praktické zkušenosti přesvědčivě naznačují, že využití Comparable a Comparator v Java výrazně zvyšuje kontrolu, kterou máme nad tříděním dat, a zlepšuje výkon i funkčnost.

Shrňte tento příspěvek takto: