1. String[] 문자열 배열의 비교
// 오름차순 (기본)
Arrays.sort(strings, (a, b) -> a.compareTo(b));
// 또는
Arrays.sort(strings);
// 내림차순
Arrays.sort(strings, (a, b) -> b.compareTo(a));
// 또는
Arrays.sort(strings, Collections.reverseOrder());
2. int[] 숫자 배열의 비교
//오름차순
Arrays.sort(arr);
그런데 int[]의 역순 정렬은 가능하지 않아 다른 여러가지 방법을 사용해야한다
int[] arr = {1, 2, 3, 4, 5};
// 1. 먼저 오름차순 정렬
Arrays.sort(arr);
// 2. 배열 뒤집기
for(int i = 0; i < arr.length/2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
또는 람다식 사용
numbers = Arrays.stream(numbers) // int[] -> IntStream
.boxed() //IntStream -> Stream<Integer>
.sorted(Collections.reverseOrder()) // 역순 정렬
.mapToInt(Integer::intValue) // Stream<Integer> -> IntStream
.toArray(); // IntStream -> int[]
3. 여러가지 방법으로 정렬하는 방법
import java.io.*;
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (a,b) -> {
if(a.charAt(n) == b.charAt(n)) {
return a.compareTo(b); // n번째 문자가 같으면 사전순 정렬
}
return Character.compare(a.charAt(n), b.charAt(n)); // n번째 문자로 정렬
});
return strings;
}
}
4. 특정 타입(Wrapper)의 비교 방법
Integer.compare(x, y) // int 비교
Long.compare(x, y) // long 비교
Double.compare(x, y) // double 비교
Float.compare(x, y) // float 비교
Short.compare(x, y) // short 비교
Byte.compare(x, y) // byte 비교
Arrays.sort(arr, (a,b) -> Integer.compare(a.getAge(), b.getAge()));
Arrays.sort(arr, (a,b) -> Double.compare(a.getScore(), b.getScore()));
Arrays.sort(arr, (a,b) -> Character.compare(a.getName().charAt(0), b.getName().charAt(0)));
5. List 정렬
List<String> list = new ArrayList<>();
// 오름차순
list.sort(Comparator.naturalOrder());
// 또는
list.sort((a, b) -> a.compareTo(b));
// 내림차순
list.sort(Comparator.reverseOrder());
// 또는
list.sort((a, b) -> b.compareTo(a));
6. 객체 정렬 및 같은 값일 경우 정렬 기준 추가
class Person {
String name;
int age;
}
List<Person> people = new ArrayList<>();
// 이름으로 오름차순
people.sort((a, b) -> a.name.compareTo(b.name));
// 이름으로 내림차순
people.sort((a, b) -> b.name.compareTo(a.name));
// 나이로 오름차순
people.sort((a, b) -> a.age - b.age);
// 나이로 내림차순
people.sort((a, b) -> b.age - a.age);
// 나이순으로 정렬하고, 나이가 같으면 이름순
people.sort((a, b) -> {
if(a.age == b.age) {
return a.name.compareTo(b.name);
}
return a.age - b.age;
});
이러한 방법으로 쉽게 정렬하여 사용할 수 있다
'기초 알고리즘' 카테고리의 다른 글
BFS 기본코드 인접 배열 방식, 인접 리스트 방식 (0) | 2024.09.13 |
---|---|
DFS 기본 코드 인접 배열 방식, 인접 리스트 방식 (0) | 2024.09.13 |
next(), nextLine(), nextInt() 사용법 (0) | 2024.08.08 |
인덱스 바꾸기 - 자바 (1) | 2023.12.15 |
구슬을 나누는 경우의 수 구하기 - bigInteger 사용하기 (0) | 2023.12.01 |