추천, 2024

에디터의 선택

Java의 Comparable과 Comparator의 차이점

Comparable과 Comparator는 객체의 데이터 요소를 비교하는 데 사용되는 Java의 일반 인터페이스입니다. Comparable 인터페이스는 java.lang 패키지에 있고 Comparator 인터페이스는 java.util 패키지에 있습니다. Comparable 및 Comparator 인터페이스의 기본적인 차이점은 Comparable 인터페이스가 단일 정렬 순서를 제공하는 반면 Comparator 인터페이스는 여러 정렬 순서를 제공한다는 것입니다. Comparable과 Comparator 인터페이스에는 몇 가지 다른 차이점이 있습니다.

비교 차트

비교의 근거유사한비교 측정기
기본Comparable 인터페이스는 단일 정렬 순서 만 허용합니다.Comparator 인터페이스는 여러 정렬 순서를 허용합니다.
패키지Comparable 인터페이스는 java.lang 패키지에 있습니다.Comparator 인터페이스는 java.util 패키지에 있습니다.
행동 양식Comparable 인터페이스에는 단일 메서드 만 포함됩니다.
공용 int compareTo (개체 obj);
Comparator 인터페이스에는 두 가지 메소드가 있습니다.
공공 int compare (Object obj1, Object obj2)
boolean equals (Object obj)
이행Comparable 인터페이스는, 비교 대상을 가지는 클래스에 의해 구현됩니다.Comparator 인터페이스는 비교 대상이되는 클래스 대신에 sperate 클래스에 의해 구현됩니다.
비교compareTo (Object obj) 메서드는 메서드를 호출하는 데 사용 된 개체와 지정된 개체가 메서드로 전달되는지 비교합니다.compare (Object obj1, Object obj2) 메서드는 메서드에 전달 된 지정된 개체를 비교합니다.
목록 / 배열Comparable 유형의 객체 목록을 비교해야하는 경우 Collection 클래스는 Collections.sort (List lst)와 같은 메서드를 제공합니다.Comparable 유형의 객체 목록을 비교해야하는 경우 Collection 클래스는 메소드를 제공합니다. 즉
Collections.sort (List, Comparator)

Comparable의 정의

Comparable는 java.lang 패키지에서 사용할 수있는 인터페이스입니다. 클래스는 자연 순서로 객체를 정렬하기 위해 Comparator 인터페이스를 구현합니다. 객체는 자연 순서로 정렬됩니다. 객체가 ASCII 값으로 비교됩니다. Comparable 인터페이스를 구현하는 클래스는 Byte, Character, Double, Float, Long, Short, String 및 Integer 클래스입니다. Date와 Calander 클래스조차도 Comparable 인터페이스를 구현합니다.

Comparable 인터페이스는 CompareTo (Object obj) 메서드 하나만 포함합니다. 이 메서드는 메서드를 호출하는 데 사용 된 개체와 매개 변수에 지정된 개체를 비교합니다. 메서드 구문은 다음과 같습니다.

 공용 int compareTo (개체 obj); 

CompareTo (Object obj) 메서드는 메서드에 의해 비교 된 두 개체가 같은 값을 포함하면 0 을 반환하고 호출하는 개체가 지정된 개체보다 작은 경우 -ve 값을 반환하고 호출하는 개체가 더 큰 경우에는 ve 값을 반환합니다. Collection 클래스는 목록의 요소를 정렬하기위한 정렬 방법을 제공합니다. Comparable 유형의 목록 (및 배열) 요소는 "Collections.sort (List lst)"메서드를 사용하여 정렬 할 수 있습니다.

비교 측정기의 정의

Comparator는 java.util 패키지에서 사용할 수있는 인터페이스입니다. Comparator 인터페이스는 비교 대상이되는 클래스에는 구현되어 있지 않습니다. 대신에, 별도의 클래스가 Comparator 인터페이스를 구현하므로, 정렬 논리가 다른 클래스의 객체의 각 데이터 요소에 적용됩니다. Comparator에는 다음과 같은 두 가지 방법이 있습니다.

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

위의 compare () 메서드는 첫 번째 객체 인 obj1과 두 번째 객체 인 obj2를 비교합니다. compare () 메서드는 메서드에 의해 비교 된 두 개체가 같은 값을 포함하면 0 을 반환하고 obj1 개체가 obj2 개체보다 작은 경우 -ve 값을 반환하고 obj1 개체가 obj1 개체보다 큰 값을 갖는 경우 + ve 값을 반환합니다. obj2 객체에 전달한다. equals () 메소드는, 지정된 오브젝트가 호출하는 오브젝트와 동일한 지 어떤지를 판정합니다. equals () 메서드는 비교되는 두 객체가 동일하면 true를 반환하고 그렇지 않으면 false를 반환합니다. Collections 클래스는 list 및 comparator 유형의 요소를 정렬하는 메서드를 제공합니다. Comparator 형의리스트 요소는 Collections.sort (List, Comparator) 메소드에 의해 소트됩니다.

Comparable과 Comparator의 주요 차이점

  1. Comparable 인터페이스는 단일 정렬 순서를 허용하므로 compareTo () 메소드에서 객체의 단일 데이터 요소 만 비교할 수 있습니다. Comparator 인터페이스는 여러 정렬 순서를 허용하므로 객체의 여러 데이터 요소를 비교할 수 있습니다.
  2. Comparable 인터페이스는, 소트 로직이 같은 클래스 내에 정의되고 있기 (위해) 때문에, 비교 대상의 클래스에 의해 구현됩니다. 반면에, Comparator 인터페이스는 객체가 비교 될 클래스에 의해 구현되지 않습니다. 왜냐하면, 정렬 로직이 각 클래스가 객체의 단일 데이터 요소에 대한 정렬을 정의하는 별도의 클래스에 정의되어 있고, 이 정의 클래스가 Comparator 인터페이스를 구현하기 때문입니다 .
  3. Comparable 인터페이스는 java.lang 패키지 내에 있고, Comparator 인터페이스는 java.util 패키지 내에 있습니다.
  4. Comparable 인터페이스는 compareTo (Object obj) 메서드를 하나만 선언하지만 Comparator 인터페이스는 compare (Object obj1, Object obj2)와 equals (Object obj)의 두 메서드를 선언합니다.
  5. Comparable의 compareTo (Object obj) 메서드는 메서드 호출 객체와 메서드에 전달 된 지정된 객체를 비교하는 반면 Comparator의 compare (Object obj1, Object obj2) 메서드는 메서드에 전달되는 obj1과 obj2 객체를 비교합니다.
  6. Collections 클래스는 "Collections.sort (List lst)"정렬 방법을 제공하여 Comparable 유형의 객체를 정렬합니다. Collections 클래스는 Collections.sort (List, Comparator) 정렬 방법을 제공하여 Comparator 유형의 객체를 정렬합니다.

결론:

자연 순서에 따라 객체를 정렬하려면 비교 가능한 인터페이스를 사용하고 다른 속성을 기반으로 객체를 정렬하려면 Comparator 인터페이스가 사용됩니다.

Top