728x90
반응형
2023년 11월 13일 TIL
알고리즘을 풀다보니 자꾸 나오는 패턴이 있어 정리해둘 목적으로 작성한다.
Array.sort
일단 Array.sort는 quickSort 형태의 내장 함수이며 @Override되지 않은 일반 형태에서는
int[] , long[] , short[] , char[] , byte[] , float[] , double[]
타입을 오름차순 정렬할 수 있다.
Array.sort(array);
return
sort 는 void 타입의 메서드라 return 되는 정보가 없다.
이 때문에 정렬하고자 하는 배열을 정렬과 동시에 새로운 배열에 옮겨 담지 못한다.
// 될것 같았지만 안되던 것.
int[] newIntArray = Array.sort(oldIntArray);
내림차순 정렬
직접 손으로 짜지 않아도, sort 내장 함수를 @Override 하여 역 정렬이 가능하다.
//내림차순 정렬
Arrays.sort(numbers, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return b.compareTo(a);
}
});
혹은
//람다식을 사용한 내림차순 정렬
Arrays.sort(numbers, (a, b) -> b.compareTo(a));
Comparator
Arrays.sort(t, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
return 0;
}
});
Intelli J 에서는
Arrays.sort(strings, new C...
까지만 작성을 한다면
@Override compare 형태를 자동완성 시켜준다.
compare
내부에서 o1 와 o2 를 가지고 놀게 되는데,
o1이 o2보다 작다면 음수를 반환
o1과 o2가 같다면 0을 반환
o1이 o2보다 크다면 양수를 반환각 o1 와 o2 는 현재 정렬하고 있는 배열 내부에서 현재 비교하고 있는 두개의 요소다.
@Override
public int compare(Integer a, Integer b) {
return a - b; // 오름차순 정렬
}
@Override
public int compare(Integer a, Integer b) {
return b - a; // 내림차순 정렬
}
compare 는 그 요소 뿐 아니라 String의 n번째 글자를 비교하여 그 글자를 기준으로 한
정렬에도 활용이 가능하다.
compareTo
그 외에도 compareTo 같은 경우 두 String1 String2 를 비교하여 사전순으로 비교해준다.
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.charAt(n) != s2.charAt(n))
return s1.charAt(n) - s2.charAt(n);
return s1.compareTo(s2);
}
});
괄호 위치
처음에 이 메서드를 이용하다가 점심을 나가서 먹을 뻔 했는데,
Arrays.sort(strings, new Comparator<String>() { //<-- 여기 괄호가 안맞는다.
@Override
public int compare(String s1, String s2) {
if (s1.charAt(n) != s2.charAt(n))
return s1.charAt(n) - s2.charAt(n);
return s1.compareTo(s2);
}
}); //<-- 그 괄호는 여기서 닫힌다.
애초에
Arrays.sort(strings, new Comparator<String>() { @Override public int compare(String s1, String s2) { if (s1.charAt(n) != s2.charAt(n)) return s1.charAt(n) - s2.charAt(n); return s1.compareTo(s2); } } );
였나보다. 괄호가 가장 끝에서 닫힌다. 나는 끝에서 닫힌다
Object
Object 배열을 정렬하려면 해당 객체가 Comparable 인터페이스를 구현하거나, 정렬 시 Comparator 를 이용해야한다.
Arrays.sort(users, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return u1.getName().compareTo(u2.getName());
}
});
아직까지는 이 정도를 활용하고 있다.
추후에 필요하다면 추가할듯
728x90
반응형
'TIL' 카테고리의 다른 글
| nbs Project (0) | 2023.11.21 |
|---|---|
| SK TECH SUMMIT (0) | 2023.11.16 |
| IntelliJ Cannot connect to already running IDE instance. (2) | 2023.11.12 |
| 프로그래머스 알고리즘 1단계 (0) | 2023.11.12 |
| 2023년 11월 09일 (1) | 2023.11.09 |