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 |