Java에서comparator 인터페이스와Comparable 인터페이스의 차이점 분석

비교 가능한 소개
Comparable은 정렬 인터페이스입니다.
클래스가 Comparable 인터페이스를 구현하면 클래스 지원 정렬을 의미합니다.즉, Comparable 인터페이스의 클래스 지원 정렬을 실현합니다. 현재'Comparable 인터페이스를 실현하는 클래스의 대상의 List 목록(또는 그룹)'이 존재한다고 가정하면 이 List 목록(또는 그룹)은 Collections를 통해 사용할 수 있습니다.정렬하려면 sort 또는 Arrays.sort 를 선택합니다.
또한 Comparable 인터페이스를 구현하는 클래스의 객체는 비교기를 지정하지 않고도 TreeMap의 키나 TreeSet의 요소로 사용할 수 있습니다.
1. Comparator와 Comparable가 같은 곳
그들은 모두 자바의 인터페이스이고 사용자 정의class의 크기를 비교하는 데 사용된다.
사용자 정의 클래스는 무엇입니까? 예를 들어public class Person {String name;intage}입니다.
우리가 이런 person List를 가지고 있다면, 그 안에 person 1, person 2, persion 3이 포함되어 있다.우리는 컬렉션을 사용합니다.sort( personList ),
예상한 결과를 얻지 못했다.문자열list를 정렬할 수 있는 이유는 다음과 같습니다.
예를 들어 StringList {"hello1", "hello3", "hello2"}, Collections.sort(stringList)가 정확한 정렬을 얻을 수 있는 이유는
String이라는 대상은 이미 우리를comparable 인터페이스를 실현하는 데 도움을 주었기 때문에 우리의Person은 정렬을 원한다면 비교기를 실현해야 한다.
2. Comparator와 Comparable의 차이
Comparable
Comparable은 Person 클래스의 내부에 정의됩니다.
public class Persion implements Comparable {.. Person 크기 비교...},
이미 비교기를 실현했기 때문에 우리 Person은 현재 크기를 비교할 수 있는 대상이다. 비교 기능은 String과 완전히 같아서 언제 어디서나 가져올 수 있다
크기를 비교해라. 왜냐하면 Person은 현재 스스로 크기의 구분이 있기 때문이다.Collections.sort(personList)는 정확한 결과를 얻을 수 있습니다.
Comparator
Comparator는 Person의 외부에 정의되어 있으므로 Person 클래스의 구조는 변경될 필요가 없습니다.

public class Person{ String name; int age },
그리고 우리는 또 하나의 비교기를 정의한다.

public PersonComparator implements Comparator() {.. Person ..},
Person Comparator에서 두 Person의 크기를 어떻게 비교하는지 구현했습니다.그래서 이런 방법으로 우리가 personList를 정렬하려고 할 때
우리는 PersonList의 과거를 전달하는 것 외에 PersonComparator를 전달해야 한다. 왜냐하면 Person의 크기가 PersonComparator에 있기 때문이다.
다음과 같이 구현됩니다.

Collections.sort( personList , new PersonComparator() ).
3. Comparator 및 Comparable 인스턴스
Comparable:
Comparable 인터페이스를 실현하려면 compareTo 방법을 덮어쓰고 compareTo 방법에서 비교합니다.

public class Person implements Comparable {
String name;
int age;
public int compareTo(Person another) {
int i = 0;
i = name.compareTo(another.name); //  
if(i == 0) { //  , ,  
return age - another.age;
} else {
return i; //  ,  .
}
}
}
이때 우리는 직접 컬렉션을 사용할 수 있다.sort(personList)가 정렬되었습니다.
Comparator:
Comparator를 구현하려면 compare 메서드를 덮어써야 합니다.

public class Person{
String name;
int age;
}
class PersonComparator implements Comparator<Person> { 
public int compare(Person one, Person another) {
int i = 0;
i = one.name.compareTo(another.name); //  
if(i == 0) { //  , , 
return one.age - another.age;
} else {
return i; //  ,  .
}
}
}
Collections.sort( personList , new PersonComparator())  
4: 요약
두 가지 방법은 각각 우열이 있다. Comparable로 간단하다. Comparable 인터페이스를 실현하는 대상은 바로 비교할 수 있는 대상이 된다.
그러나 원본 코드를 수정해야 한다. Comparator의 장점은 원본 코드를 수정할 필요가 없고 하나의 비교기를 따로 실현하는 것이다.
의 대상이 비교를 해야 할 때, 비교기와 대상을 함께 전달하면 크기를 비교할 수 있으며,Comparator에서 사용자는
이미 복잡하고 통용될 수 있는 논리를 실현하여 비교적 간단한 대상에 일치하게 함으로써 많은 중복 노동을 절약할 수 있다.

좋은 웹페이지 즐겨찾기