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

Obsah:

Anonim

Co je srovnatelné v Javě?

Srovnatelný v Javě je objekt, který se porovnává s jiným objektem. Pomáhá třídit seznam vlastních objektů. Rozhraní java.lang.Comparable by měla být implementována třídou, aby bylo možné porovnat její instance. Pole objektů implementujících srovnatelné rozhraní je automaticky tříděno metodami Arrays.sort a Collections.sort.

V tomto tutoriálu Komparátor vs Srovnatelný v Javě se naučíte:

  • Co je srovnatelné v Javě?
  • Co je komparátor v Javě?
  • Metoda použitá ve srovnatelném:
  • Metoda použitá v komparátoru:
  • Rozdíl mezi srovnatelným a komparátorem v Javě
  • Osvědčené postupy při používání komparátoru a srovnatelné v Javě

Co je komparátor v Javě?

Komparátor v Javě je objekt pro porovnávání různých objektů různých tříd. Rozhraní komparátoru v Javě se také používá k uspořádání objektů tříd definovaných uživatelem. Zahrnuje dvě důležité metody rozhraní komparátoru známé jako porovnání (Object obj1, Object obj2) a equals (Object element).

KLÍČOVÉ ROZDÍLY:

  • Srovnatelná poskytuje metodu porovnání () k řazení prvků v Javě, zatímco komparátor poskytuje metodu porovnání () k řazení prvků v Javě.
  • Srovnatelné rozhraní je přítomno v balíčku java.lang, zatímco rozhraní komparátoru je přítomno v balíčku java.util.
  • Comparable poskytuje jednu řadicí sekvenci, zatímco Comparator poskytuje více třídicích sekvencí.
  • Srovnatelné ovlivňuje původní třídu, zatímco komparátor neovlivňuje původní třídu.

Metoda použitá ve srovnatelném:

Následuje důležitá metoda používaná ve srovnatelném rozhraní:

Porovnat s():

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

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

int compareTo(T obj)

Ve výše uvedené syntaxi T označuje typ objektů, které hodláte porovnat.

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

Výstup:

  • Vrátí 0, pokud jsou hodnoty stejné.
  • V případě, že má objekt menší hodnotu, vrátí tato metoda zápornou hodnotu.
  • Pokud má objekt vyšší hodnotu, vrátí kladnou hodnotu.

Příklad metody CompareTo ():

Následující program srovnatelného příkladu Java ukazuje srovnání dvou znaků „a“ a „b“. Znak „a“ přichází před „b“ abecedně.

Proto je výstup -1. Znak „b“ následuje za „a“ abecedně. Proto je výstup 1. Znak „a“ a „b“ jsou oba ekvivalentní. Proto je výstup 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 : -1Compare To 'b' a is : 1Compare To 'b' b is : 0

Metoda použitá v komparátoru:

Níže jsou uvedeny důležité metody používané v komparátorovém rozhraní:

Porovnat ():

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

Syntaxe metody compare () 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 ().

Výstup:

  • Vrátí záporné celé číslo, pokud je první argument menší než druhý.
  • Vrátí nulu, pokud je první a druhý argument stejný.
  • 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 porovnání metody:

V níže uvedeném programu příkladu komparátoru Java existuje 6 proměnných. „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 zeroSystem.out.println(Integer.compare(x, y));int p = 40;int q = 40;// as 30 equals 30,// Output will be zeroSystem.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 zeroSystem.out.println(Integer.compare(r, s));}}

Výstup:

-101

Rovná se():

Equals () ověří, zda se objekt číslo rovná objektu, který je předán jako argument nebo ne.

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

public boolean equals (Objekt o)

Tato metoda trvá dva parametry 1) libovolný objekt 2) návratová hodnota. Vrátí true, pokud předaný argument nemá hodnotu null a je objektem podobného typu se stejnou číselnou hodnotou.

Příklad metody rovná se:

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

Druhý výsledek je pravdivý, protože hodnota proměnné 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

falsetruefalse

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

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

Zde jsou hlavní rozdíly mezi Java Comparable vs Comparator:

Srovnatelný Komparátor
Srovnatelná poskytuje metodu compareTo () pro třídění prvků v Javě. Komparátor poskytuje metodu porovnání () pro třídění prvků v Javě.
Srovnatelné rozhraní je přítomno v balíčku java.lang. Rozhraní komparátoru je přítomno v balíčku java.util.
Logika třídění musí být ve stejné třídě, jejíž objekt budete třídit. Logika třídění by měla být v samostatné třídě, aby bylo možné psát různé třídění na základě různých atributů objektů.
Třída, jejíž objekty chcete třídit, musí implementovat srovnatelné rozhraní. Class, jehož objekty chcete třídit, nemusíte implementovat komparátorové rozhraní.
Poskytuje jednotlivé třídicí sekvence. Poskytuje několik třídicích sekvencí.
Tato metoda může data seřadit podle přirozeného pořadí řazení. Tato metoda seřadí data podle přizpůsobeného pořadí řazení.
Ovlivňuje původní třídu. tj. aktuální třída je změněna. Neovlivňuje původní třídu, tj. Skutečná třída se nezmění.
Implementováno často v API podle: Calendar, Wrapper classes, Date, and String. Je implementován pro třídění instancí tříd třetích stran.
Všechny třídy wrapperů a třídy String implementují srovnatelné rozhraní. Jediné implementované třídy komparátoru jsou Collator a RuleBasedColator.

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

  • Pokud je srovnání pro konkrétní třídu standardní, použijte srovnatelné rozhraní.
  • Můžete použít lambdy s komparátorem.
  • Mnoho základních tříd dostupných v implementuje srovnatelné rozhraní.
  • Je možné použít TreeSet a TreeMap nebo při třídění Set nebo Map.
  • Metoda compareTo () funguje s komparátorem i srovnatelně.
  • Rozhraní komparátoru použijte, pouze pokud
  • Metoda compareTo () vrátí kladné celé číslo, pokud je první objekt větší než druhý, záporné, pokud je nižší, a nula, pokud jsou oba stejné.