ArrayList에 직접 만든 클래스를 정렬하거나
우선순위큐에 집어넣을 때, 클래스 내에 여러개의 필드가 있기에 정렬 기준을 설정해야 한다.
클래스 자체에 설정하는 방식과
.sort() 메서드나 자료구조 생성 시에 설정해주는 방식이 있다.
1. 클래스에 설정.
static class edge implements Comparable<edge>{
public int weight;
public int to;
public edge(int weight,int to){
this.weight=weight;this.to=to;
}
@Override
public int compareTo(edge e){
int com = Integer.compare(this.weight,e.weight);
if(com==0){
return Integer.compare(this.to,e.to);
}
return com;
}
}
WrapperClass.compare(a,b); 메서드는 앞에것이 작으면 -1, 크면 1, 둘이 같으면 0을 반환하는 메서드.
오버라이딩 한 compareTo(Obejct e) 메서드에 -1이 반환되면 호출객체가 비교대상객체보다 우선순위가 낮다는 것이고
위와같이 구현했을 때 오름차순이 된다.
.compare(호출대상, this) 했으면 내림차순이 됐을 것.
위의 코드는 두가지 필드를 모두 정렬기준으로 삼으려고 구현 한 것이고 1순위 기준이 0일 때,
2순위 기준을 기반으로 compare 해서 return 해준다.
2.sort 함수내부나 자료구조 생성시 지정.
Comparator 익명클래스를 생성하고 compare함수를 Override해서 설정해줄 수 있다.
오버라이딩 함수 구현방식은 아까와 유사하고, 두개의 인자를 받아 this 자리가 앞 인자가 된다.
클래스 빌더 패턴 (2) | 2025.03.04 |
---|---|
enum 매핑 (0) | 2025.02.28 |
Object Class, 불변객체, String (0) | 2024.03.30 |
상속, 다형성 (0) | 2024.03.30 |
생성자, 접근제어자, static (0) | 2024.03.29 |