ArrayList 를 class로 정의한 후 정렬 해야할 때 Comparator를 만들어서 정렬을 할 수 있다. 사용방식은 아래와 같다.
private static class Meeting {
private Long startTime;
private Long endTime;
public Meeting(Long startTime, Long endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public Long getStartTime() {
return startTime;
}
public Long getEndTime() {
return endTime;
}
}
static class MeetingComparator implements Comparator<Meeting> {
@Override
public int compare(Meeting a, Meeting b) {
if (a.getEndTime() > b.getEndTime()) {
return 1;
}
if (a.getEndTime() < b.getEndTime()) {
return -1;
}
return 0;
}
}
+++++ 아래와 같이 간략화 가능
static class MettingComparator implements Comparator<Metting> {
@Override
public int compare(Megtting a, Megtting b) {
return Integer.compare(a.getEndTime(), b.getEndTime());
}
}
ArrayList<Meeting> meetings = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
Long startTime = sc.nextLong();
Long endTime = sc.nextLong();
meetings.add(new Meeting(startTime, endTime));
}
Collections.sort(meetings, new MeetingComparator());
이때 class안에 변수 a에 대해 1차적으로 정렬 후에 a가 같은 값끼리는 변수 b로 2차적으로 정렬을 해야할 때가 있다.
그럴 때는 아래와 같이 작성하면 된다.
static class MeetingComparator implements Comparator<Meeting> {
@Override
public int compare(Meeting a, Meeting b) {
if (a.getEndTime() > b.getEndTime()) {
return 1;
}
if (a.getEndTime() == b.getEndTime()) {
if (a.getStartTime() > b.getStartTime()) {
return 1;
}
if (a.getStartTime() < b.getStartTime()) {
return -1;
}
}
if (a.getEndTime() < b.getEndTime()) {
return -1;
}
return 0;
}
}
단순히 if 문으로 endTime 변수의 값이 같은 경우를 추가했다.
static class ArraysComparator<String> implements Comparator<String> {
@Override
public int compare(String a, String b) {
if (a.toString().length() > b.toString().length()) {
return 1;
}
if (a.toString().length() < b.toString().length()) {
return -1;
}
if(a.toString().length() == b.toString().length()){
if(a.toString().charAt(0) > b.toString().charAt(0)){
return 1;
}
if(a.toString().charAt(0) < b.toString().charAt(0)){
return -1;
}
if(a.toString().charAt(0) == b.toString().charAt(0)){
return a.toString().compareTo(b.toString());
}
}
return 0;
}
참고
[정렬] 자바(java) 다중 정렬 (multi sort)
http://suite.tistory.com fs 2011.2 자바에서 리스트 객체의 멤버 값에 따라 정렬시 Collections.sort() 를 사용해보는데 한개 변수..
suite.tistory.com
https://www.daleseo.com/java-comparable-comparator/
[Java] 객체 정렬하기 1부 - Comparable vs Comparator
Engineering Blog by Dale Seo
www.daleseo.com
'JAVA' 카테고리의 다른 글
자바기본개념 - 자바가상머신 및 가비지 컬랙션 (0) | 2021.10.22 |
---|---|
자바 핵심 기본 내용 (0) | 2021.10.17 |
java - Priority Queue(우선순위 큐) (0) | 2021.10.05 |
자바 매우 큰 수를 표현하는 법 ( BigInteger) (0) | 2021.09.01 |
JAVA 스트림(Stream) (0) | 2021.07.01 |