Porównywalny vs Porównywalny w Java
Kluczowa różnica między porównywalnym a komparatorem w Java
- Porównywalne w Java jest obiektem do porównywania z innym obiektem, natomiast Comparator jest obiektem do porównywania różnych obiektów różnych klas.
- Porównywalne zapewnia
compareTo()
metoda sortowania elementów Java, podczas gdy Comparator zapewniacompare()
metoda sortowania elementów Java. - Porównywalny interfejs jest dostępny w
java.lang
pakiet, podczas gdy interfejs komparatora jest obecny wjava.util
pakiet. - Comparable zapewnia pojedynczą sekwencję sortowania, podczas gdy Comparator zapewnia wiele sekwencji sortowania.
- Comparable wpływa na pierwotną klasę, podczas gdy Comparator nie wpływa na pierwotną klasę.

Tutaj przeanalizowałem różnicę między porównywalnym a porównawczym i kompleksowo ocenię ich zalety i wady.
Co jest porównywalne w Java?
Porównywalny z: in Java jest obiektem, który porównuje się z innym obiektem. Pomaga sortować listę niestandardowych obiektów. Java.lang.Porównywalny interfejs powinien zostać zaimplementowany przez klasę w celu porównania jej instancji. Tablica obiektów implementujących porównywalny interfejs jest sortowana automatycznie według Arrays.sort
oraz Collections.sort
Metody.
Metoda zastosowana w Comparable
Chciałbym podkreślić ważną metodę, której często używam w interfejsie Comparable:
Porównać do():
Metoda CompareTo() jest używana do wykonywania naturalnego sortowania na ciągu. Znaczenie sortowania naturalnego to kolejność sortowania, która ma zastosowanie do obiektu, np. kolejność numeryczna dla sortowania liczb całkowitych, kolejność alfabetyczna dla ciągu itd.
Składnia CompareTo()
metoda jest następująca:
int compareTo(T obj)
W powyższej składni T oznacza typ obiektów, które będziesz porównywać.
CompareTo()
Metoda porównuje obiekt z obiektem T.
Wyjście:
- Zwraca 0, jeśli wartości są równe.
- Jeśli obiekt ma niższą wartość, to ta metoda zwraca wartość ujemną.
- Jeśli obiekt ma wyższą wartość, zwraca wartość dodatnią.
Przykład porównania w Java
Poniżej przedstawiono program Java porównywalny przykład pokazuje porównanie dwóch znaków „a” i „b”. Znak „a” występuje alfabetycznie przed „b”.
Dlatego wynik wynosi -1. Znak „b” występuje alfabetycznie po „a”. Zatem wynik wynosi 1. Znaki „a” i „b” są równoważne. Zatem wynik wynosi 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")); } }
Wydajność
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
W czym jest komparator Java?
Porównywarka in Java jest obiektem służącym do porównywania różnych obiektów różnych klas. Interfejs komparatora w Java służy również do porządkowania obiektów klas zdefiniowanych przez użytkownika. Zawiera dwie ważne metody interfejsu komparatora, znane jako porównanie (obiekt obj1, obiekt obj2) i równa się (element obiektu).
Metoda stosowana w komparatorze
W mojej praktyce często korzystam z następujących kluczowych metod interfejsu komparatora:
Porównywać():
Compare()
umożliwia zamawianie obiektów. Aby to zrobić, musisz utworzyć klasę implementującą interfejs komparatora. Następnie musisz zastąpić metodę porównania.
Składnia compare()
metoda jest następująca:
compare(Object obj1, Object obj2)
W powyższej składni obj1 i obj2 to dwa obiekty, które należy porównać za pomocą metody Compare(). compare()
Metoda.
Wyjście:
- Zwraca ujemną liczbę całkowitą, jeśli pierwszy argument jest mniejszy niż drugi.
- Zwraca zero, jeśli pierwszy argument i drugi argument są równe.
- Ta metoda może zwrócić dodatnią liczbę całkowitą w przypadku, gdy pierwszy argument jest większy niż drugi.
Musisz upewnić się, że relacja jest przechodnia. Na przykład ((porównaj(a, b)>0) && (porównaj(b, c)>0)), co implikuje porównanie(a, c)>0.
Przykład porównania w Java
w poniższym Java przykład porównawczy, jest 6 zmienne. „x”, „y”, „p”, „q”, „r” i „s”. Wynik wynosi -1 jako wartość „x”, 20 jest mniejsza niż wartość „y”, 30. Wynik wynosi 0, ponieważ wartość „p”, 40 jest równa wartości „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)); } }
Wyjście:
-1 0 1
Równa się():
Equals()
sprawdza, czy obiekt liczbowy jest równy obiektowi przekazywanemu jako argument, czy nie.
Składnia equals()
metoda jest następująca:
public boolean equals(Object o)
Ta metoda przyjmuje dwa parametry: 1) dowolny obiekt i 2) wartość zwracaną. Zwraca wartość true, jeśli przekazany argument nie ma wartości null i jest obiektem podobnego typu mającym tę samą wartość liczbową.
Przykład metody równa się:
W poniższym przykładzie porównam ze sobą cztery zmienne. Trzy zmienne są typu integer, a jedna jest typu krótkiego. Pierwszy wynik jest fałszywy, ponieważ wartość p, która wynosi 5, nie jest równa wartości q, która wynosi 20.
Drugi wynik jest prawdziwy, ponieważ wartość zmiennych p i r jest taka sama, czyli wynosi 5. Na koniec wynik jest fałszywy, ponieważ zmiennym p i s przypisano różne wartości.
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)); } }
Wydajność
false true false
Różnice między porównywalnym a komparatorem w Java
Często widzę zamieszanie pomiędzy Java Porównywalne i komparator; oto główna różnica:
Podstawa porównania | Porównywalny z: | Komparator |
---|---|---|
Metoda wykonania | Porównywalne oferty compareTo() metoda sortowania elementów Java. |
Porównywarka zapewnia compare() metoda sortowania elementów Java. |
Pakiet | Porównywalny interfejs jest dostępny w java.lang pakiet. |
Interfejs komparatora jest obecny w java.util pakiet. |
Logika sortowania | Logika sortowania musi należeć do tej samej klasy co obiekt, który chcesz posortować. | Logika sortowania powinna znajdować się w oddzielnych klasach, aby móc pisać różne sortowania w oparciu o różne atrybuty obiektów. |
Obiekt klasy | Klasa, której obiekty chcesz posortować, musi implementować interfejs Comparable. | Klasa, której obiekty chcesz posortować, nie musi implementować interfejsu komparatora. |
Sekwencje sortowania | Zapewnia pojedyncze sekwencje sortowania. | Zapewnia wiele sekwencji sortowania. |
Kolejność sortowania | Ta metoda umożliwia sortowanie danych zgodnie z naturalnym porządkiem sortowania. | Ta metoda sortuje dane zgodnie z niestandardową kolejnością sortowania. |
Klasa | Wpływa na oryginalną klasę. tj. rzeczywista klasa zostaje zmieniona. | Nie ma to wpływu na pierwotną klasę, tj. rzeczywista klasa nie ulega zmianie. |
Stosowanie | Często implementowane w interfejsie API przez klasy Kalendarz, Wrapper, Date i Strunowy. |
Jest zaimplementowany do sortowania instancji klas innych firm. |
Wdrożenie | Wszystkie klasy opakowań i klasy ciągów implementują porównywalne interfejsy. | Jedynymi zaimplementowanymi klasami Comparatora są Collator i RuleBasedColator. |
Najlepsze praktyki podczas korzystania z komparatora i urządzenia porównywalnego w Java
- Użyj porównywalnego interfejsu, jeśli porównanie jest standardowe dla określonej klasy.
- Możesz użyć lambd z komparatorem.
- Wiele dostępnych klas podstawowych implementuje porównywalny interfejs.
- Podczas sortowania zestawu lub mapy można używać TreeSet i TreeMap.
-
compareTo()
Metoda działa zarówno z komparatorem, jak i porównywalną. - Używaj interfejsu komparatora tylko wtedy, gdy < potrzebujesz większej elastyczności.
-
compareTo()
metoda zwróci dodatnią liczbę całkowitą, jeśli pierwszy obiekt jest większy od drugiego, ujemną, jeśli jest mniejsza i zero, jeśli oba są takie same.
Jak wybrać pomiędzy produktem porównywalnym a komparatorem
Podsumowując, moje praktyczne doświadczenie sugeruje, że wykorzystanie funkcji porównawczych i porównawczych w Java znacznie zwiększa naszą kontrolę nad sortowaniem danych, poprawiając zarówno wydajność, jak i funkcjonalność.