<원문>
https://www.programcreek.com/2011/12/examples-to-demonstrate-comparable-vs-comparator-in-java/
Comparable과 Comparator는 Java Core API에서 제공하는 두 개의 인터페이스입니다. 그들의 이름에서 알수 있듯이, 우리는 두 인터페이스는 어떤 식 으로든 물건 비교에 사용될 수 있다고 말할 수 있습니다. 그러나 정확히 무엇이며 그것들의 차이점은 무엇입니까? 이 질문에 답하는 두 가지 예는 다음과 같습니다. 간단한 예제는 2 개의 HDTV 크기를 비교하는 것입니다. Comparable 대 Comparator를 사용하는 방법은 이래의 코드를 읽은 후 분명히 확인 할 수 있습니다.
1. Comparable
Comparable은 클래스의 객체를 다른 객체와 비교할 수 있도록 클래스에 의해 구현됩니다. 인스턴스 자체를 비교할 수 있으려면 클래스 자체가 인터페이스를 구현해야합니다. 구현에 필요한 메소드는 compareTo()입니다. 다음은 그 예입니다.
class HDTV implements Comparable<HDTV> {
private int size;
private String brand;
public HDTV(int size, String brand) {
this.size = size;
this.brand = brand;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public int compareTo(HDTV tv) {
if (this.getSize() > tv.getSize())
return 1;
else if (this.getSize() < tv.getSize())
return -1;
else
return 0;
}
}
public class Main {
public static void main(String[] args) {
HDTV tv1 = new HDTV(55, "Samsung");
HDTV tv2 = new HDTV(60, "Sony");
if (tv1.compareTo(tv2) > 0) {
System.out.println(tv1.getBrand() + " is better.");
} else {
System.out.println(tv2.getBrand() + " is better.");
}
}
}
Sony is better.
2. Comparator
어떤 상황에서는 클래스를 변경하여 비교할 수 없기를 바랄 수도 있습니다. 이 경우 특정 속성 / 필드를 기반으로 개체를 비교하려는 경우 Comparator를 사용할 수 있습니다. 예를 들어 '높이'또는 '연령'등을 기준으로 2 명을 비교할 수 있습니다 (비교할 수는 없습니다).
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class HDTV {
private int size;
private String brand;
public HDTV(int size, String brand) {
this.size = size;
this.brand = brand;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
class SizeComparator implements Comparator<HDTV> {
@Override
public int compare(HDTV tv1, HDTV tv2) {
int tv1Size = tv1.getSize();
int tv2Size = tv2.getSize();
if (tv1Size > tv2Size) {
return 1;
} else if (tv1Size < tv2Size) {
return -1;
} else {
return 0;
}
}
}
public class Main {
public static void main(String[] args) {
HDTV tv1 = new HDTV(55, "Samsung");
HDTV tv2 = new HDTV(60, "Sony");
HDTV tv3 = new HDTV(42, "Panasonic");
ArrayList<HDTV> al = new ArrayList<HDTV>();
al.add(tv1);
al.add(tv2);
al.add(tv3);
Collections.sort(al, new SizeComparator());
for (HDTV a : al) {
System.out.println(a.getBrand());
}
}
}
Panasonic
Samsung
Sony
종종 우리는 내림차순 Order Comparator를 얻기 위해 Collections.reverseOrder() 메서드를 사용할 수 있습니다. 다음과 같이 :
al.add(3);
al.add(1);
al.add(2);
System.out.println(al);
Collections.sort(al);
System.out.println(al);
Comparator<Integer> comparator = Collections.reverseOrder();
Collections.sort(al,comparator);
System.out.println(al);
[3,1,2]
[1,2,3]
[3,2,1]
'IT칼럼 > JAVA' 카테고리의 다른 글
스프링 부트 + JSP + INTELLIJ 조합에서의 404 에러 이슈 (0) | 2019.03.25 |
---|---|
isPalindrome (0) | 2019.03.08 |
BigInteger, BigDecimal example (0) | 2018.11.04 |
Priority Queue (0) | 2018.11.03 |
StringBuilder example (0) | 2018.11.03 |