Zalecane, 2019

Wybór Redakcji

Różnica między porównawczym a komparatorem w Javie

Porównywalne i komparatory to ogólne interfejsy w języku Java używane do porównywania elementów danych obiektów. Interfejs porównywalny znajduje się w pakiecie java.lang, a interfejs programu Comparator jest dostępny w pakiecie java.util. Podstawowa różnica między interfejsami Porównywalne i Komparatory polega na tym, że interfejs Porównywalny zapewnia pojedynczą sekwencję sortowania, podczas gdy interfejs Komparatora zapewnia wielokrotne sekwencje sortowania. Istnieją pewne inne różnice między interfejsem Comparable i Comparator, które będziemy analizować w tabeli porównawczej.

Wykres porównania

Podstawa do porównaniaPorównywalnyKomparator
PodstawowyPorównywalny interfejs umożliwia tylko pojedynczą sekwencję sortowania.Interfejs komparatora umożliwia wielokrotne sekwencje sortowania.
PakietyInterfejs porównywalny znajduje się w pakiecie java.lang.Interfejs programu Comparator znajduje się w pakiecie java.util.
MetodyInterfejs porównywalny zawiera tylko jedną metodę
public int compareTo (Object obj);
Interfejs komparatora zawiera dwie metody
public int compare (Object obj1, Object obj2)
boolean equals (Object obj)
RealizacjaPorównywalny interfejs jest implementowany przez klasę, której obiekty mają być porównywane.Interfejs komparatora jest implementowany przez klasę sperate zamiast klasy, której obiekty mają być porównywane.
PorównanieMetoda compareTo (Object obj) porównuje obiekt, który jest używany do wywołania metody z określonym obiektem, przekazuje do metody.Metoda compare (Object obj1, Object obj2) porównuje oba określone obiekty przekazane do metody.
Lista / tablicaGdy porównywana jest lista obiektów typu Porównywalne, klasa Kolekcja zapewnia metodę tj. Collections.sort (List lst).Kiedy porównywana jest lista obiektów Porównywalnych, klasa Kolekcji zapewnia metodę tj
Collections.sort (Lista, Komparator).

Definicja porównywalne

Comparable to interfejs dostępny w pakiecie java.lang. Klasa implementuje interfejs Komparatora, aby posortować obiekt w porządku naturalnym. Obiekty są sortowane w porządku naturalnym, oznacza to, że obiekty są porównywane przez ich wartości ASCII. Klasy implementujące interfejs porównywalny to klasy Byte, Character, Double, Float, Long, Short, String i Integer. Nawet klasa Date i Calander implementuje interfejs porównywalny.

Interfejs porównywalny zawiera tylko jedną metodę, którą jest CompareTo (Object obj). Ta metoda porównuje obiekt używany do wywołania metody z obiektem określonym w parametrze. Składnia metody jest następująca:

 public int compareTo (Object obj); 

Metoda CompareTo (Object obj) zwraca 0, gdy zarówno obiekt porównywany przez metodę zawiera tę samą wartość, zwraca wartość -ve, jeśli obiekt wywołujący jest mniejszy niż określony obiekt i zwraca wartość + ve, jeśli obiekt wywołujący ma większą wartość wartość w porównaniu do określonego obiektu. Klasa Kolekcje zapewnia metodę sortowania dla sortowania elementów listy. Elementy listy (i tablicy) typu Porównywalne mogą być sortowane przy użyciu metody "Collections.sort (List lst)".

Definicja komparatora

Komparator jest interfejsem dostępnym w pakiecie java.util. Interfejs Komparator nie jest zaimplementowany w klasie, której obiekty mają być porównywane, zamiast tego osobna klasa implementuje interfejs Komparatora, tak aby logika sortowania była stosowana do każdego elementu danych obiektu w innej klasie. Komparator zawiera dwie następujące metody:

 public int compare (Object obj1, Object obj2) i boolean equals (Object obj) 

Powyższa metoda compare () porównuje pierwszy obiekt obj1 z drugim obiektem obj2. Metoda compare () zwraca 0, gdy zarówno obiekt porównywany przez metodę zawiera tę samą wartość, zwraca wartość -ve, jeśli obiekt obj1 jest mniejszy niż obiekt obj2 i zwraca wartość + ve, jeśli obiekt obj1 ma większą wartość w porównaniu do obiektu obj2. Metody equals () sprawdzają, czy określony obiekt jest równy obiektowi wywołującemu. Metoda equals () zwraca wartość true, jeśli oba porównywane obiekty są równe, jeśli zwraca false . Klasa Kolekcje zapewnia metodę sortowania elementów listy i typu komparatora. Elementy listy typów komparatorów są sortowane według metody Collections.sort (List, Comparator).

Kluczowe różnice między porównywalnym a komparatorem

  1. Porównywalny interfejs umożliwia pojedynczą sekwencję sortowania, co oznacza, że ​​można porównywać tylko jeden element danych obiektu w metodzie compareTo (), az drugiej strony interfejs komparatora umożliwia wielokrotne sekwencje sortowania, co oznacza, że ​​można porównywać wiele elementów danych obiektu.
  2. Interfejs porównywalny jest implementowany przez klasę, której obiekty mają być porównywane, ponieważ logika sortowania jest zdefiniowana w tej samej klasie. Z drugiej strony, interfejs Komparatora nie jest implementowany przez klasę, której obiekty mają być porównywane, ponieważ logika sortowania jest zdefiniowana w oddzielnych klasach, gdzie każda klasa definiuje sortowanie na pojedynczym elemencie danych obiektu i te definiujące klasy implementują interfejs Komparatora .
  3. Interfejs porównywalny znajduje się w pakiecie java.lang, natomiast interfejs komparatora znajduje się w pakiecie java.util.
  4. Interfejs porównywalny deklaruje tylko jedną metodę, którą jest compareTo (Object obj), podczas gdy interfejs Komparator deklaruje dwie metody, które są, porównać (Object obj1, Object obj2) i jest równe (Object obj).
  5. Metoda compareTo (Object obj) w Porównywalnych porównuje metodę wywołującą obiekt z określonym obiektem przekazanym do metody, podczas gdy metoda porównania (Object obj1, Object obj2) porównuje obiekty obj1 z obj2, które są przekazywane do metody.
  6. Klasa Kolekcje udostępnia metodę sortowania "Collections.sort (List lst)" w celu sortowania obiektów typu Porównywalne. Klasa Kolekcje udostępnia metodę sortowania Collections.sort (Lista, Komparator) do sortowania obiektów typu Komparator.

Wniosek:

Jeśli chcesz posortować obiekty w porządku naturalnym, możesz użyć porównywalnego interfejsu, jeśli chcesz posortować obiekty na podstawie dowolnego atrybutu, a następnie użyć interfejsu komparatora.

Top