Collections.sort()
class Solution {
public String[] reorderLogFiles(String[] logs) {
List<String> letters = new ArrayList<>();
List<String> digits = new ArrayList<>();
//identifier 을 이용하여 분류작업
for(int i = 0 ; i < logs.length ; i++){
String[] arr = logs[i].split(" ");
char identifier = arr[1].charAt(0);
if((identifier >= 'a' && identifier <= 'z') ||
(identifier >= 'A' && identifier <= 'Z')) {
letters.add(logs[i]);
}else{
digits.add(logs[i]);
}
}
//letters 정렬
Collections.sort(letters, new Comparator<String>(){
public int compare(String s1, String s2){
String o1 = s1.substring(s1.indexOf(" ") + 1);
String o2 = s2.substring(s2.indexOf(" ") + 1);
if(o1.equals(o2)) return s1.compareTo(s2);
else return o1.compareTo(o2);
}
});
//리턴값에 값 할당
String[] result = new String[logs.length];
for(int i = 0 ; i < letters.size(); i++){
result[i] = letters.get(i);
}
for(int i = 0 ; i < digits.size() ; i++){
result[i+letters.size()] = digits.get(i);
}
return result;
}
}
✅ 정렬수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스
➡️ Arrays.sort(array)
, Collections.sort(list)
기본적으로 오름차순 정렬
➡️ Comparable interface 를 이용한 Java 객체 정렬
public int compareTo(Point p) {
if(this.x > p.x) {
return 1; // x에 대해서는 오름차순
}
else if(this.x == p.x) {
if(this.y < p.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
}
// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
✅ 정렬 가능한 클래스 (Comparable 인터페이스를 구현한 클래스)들의 기본 정렬 기준과 다르게 정렬하고 싶을 때 사용하는 인터페이스- 정렬할 객체에 Comparator interface 를 implements 후, compare() 메서드를 Override 하여 구현한다.
Integer.compare(x,y)
오름차순 정렬과 동일한 개념 / return(x < y ? -1 : ((x == y) ? 0 : 1);
/ 내림차순인 경우 Integer.compare(y,x)
)➡️ Arrays.sort(array, myComparator)
, Collections.sort(list, myComparator)
➡️ Comparable interface 를 이용한 Java 객체 정렬
// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
class MyComparator implements Comparator<Point> {
@Override
public int compare(Point p1, Point p2) {
if (p1.x > p2.x) {
return 1; // x에 대해서는 오름차순
}
else if (p1.x == p2.x) {
if (p1.y < p2.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
}
// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
MyComparator myComparator = new MyComparator();
Collections.sort(pointList, myComparator);
➡️ Comparator 익명 클래스 이용
Comparator<Point> myComparator = new Comparator<Point>() {
@Override
public int compare(Point p1, Point p2) { 위와 동일 }
};
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList, myComparator);
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html