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 poskytujecompare()způsob řazení prvků Java. - Srovnatelné rozhraní je přítomno v
java.langbalíček, zatímco rozhraní Comparator je přítomno vjava.utilbalíč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.

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:

| 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.
