자바에서 다양한 정렬기준 커스텀하기

Comparator를 사용하려면 Array나 List Collection에 대해서 가능하다.

 

1. Primitive type array

 

primitive type의 경우 Comparator를 사용할 수 없다. 내림차순 정렬을 위해서 Collections.reverseOrder()를 사용하기 위해서는 아래와 같이 Wrapper Type으로 감싸서 사용해야 한다.

 

 

2. Wrapper type array

Integer[] arr = new Integer[30];
Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1-o2;
    }
});

 

 

 

 

3. Collection

ArrayList<Node> nodes = new ArrayList<>();

Collections.sort(arr, new Comparator<Node>() {
    @Override
    public int compare(Node n1, Node n2) {
        return n1.start-o2.start;
    }
});
class Node implements Comparable<myObject> {
    int start;
    int end;

    @Override
    public int compareTo(myObject o) {
    	return this.start-o.start;
    }
}

// 사용
Collctions.sort(node);

 

Array.sort()함수의 인자로 Comparator의 compare()함수를 구현하여 넣어주거나, 대상 클래스를 Comarable<>을 구현하도록 만들고 compareTo() 함수를 오버라이딩해주면 된다.

 

 

 

4. Priority Queue

static PriorityQueue<Jewel> pq = new PriorityQueue<>(new Comparator<Jewel>() {
    @Override
    public int compare(Jewel o1, Jewel o2) {
        return o2.v-o1.v; // value 내림차순 정렬
    }
});

 

우선순위 큐의 경우도 인자로 Comparator의 compare()함수를 구현하여 넣어주면 된다.

'[ 코딩테스트 ]' 카테고리의 다른 글

코테 문제유형 정리 + 팁  (0) 2023.07.23
코테용 Java 라이브러리(자료구조) 정리  (0) 2023.01.04