반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- StringBuilder
- 쿠키
- 오버라이딩
- 혼공얄코
- java
- 리눅스
- SQL Mapper
- hackerrank
- 입출력
- spring security
- 오블완
- 백트래킹
- 프로그래머스 둘만의 암호
- 멀티프로세싱
- CPU
- 프로그래머스
- localtime
- LocalDate
- 자바의정석
- 멀티태스킹
- 캡슐화
- 둘만의 암호
- 자바의 정석
- 티스토리챌린지
- spring security 설정
- StringBuffer
- 오버로딩
- over()
- 다형성
- 둘만의 암호 자바
Archives
- Today
- Total
쉽게 쉽게
[Java] 배열, 컬렉션 정렬 방법 본문
반응형
▤ 목차
1. 정렬
1차원 배열
1. Arrays.sort() 정렬
int[] arr = {2, 3, 4, 5, 1};
Integer[] numbers = {2, 3, 4, 5, 1};
//정렬 (오름차순)
Arrays.sort(arr); /* [1,2,3,4,5] */
// 내림차순 정렬 - Integer 타입
Arrays.sort(numbers, Collections.reverseOrder());
// 내림차순 정렬 - Integer 타입
Arrays.sort(numbers, Comparator.reverseOrder()); /* [5,4,3,2,1] */
2. 사용자 정의 정렬
Comparator는 두 객체를 비교하여 정렬 순서를 결정하는 인터페이스이다.
이를 사용하려면 배열의 타입을 int [] 대신 Integer []와 같은 래퍼 클래스로 선언해야 한다.
- Arrays.sort(int[] a)를 사용하며, 이는 오직 오름차순만 가능
- Arrays.sort(T [] a, Comparator <? super T> c)를 사용하며, Comparator를 전달하여 사용자 정의 정렬이 가능
1차원 배열에 Comparator를 적용하려면 반드시 배열을 Integer [], String [], Character [] 등의 객체 타입으로 선언해야 한다.
Integer[] arr = {2, 3, 4, 5, 1};
//사용자정의 정렬
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; //내림차순 정렬 [5,4,3,2,1]
}
});
// Lamda 사용
// 내림차순 정렬
Arrays.sort(numbers, (o1, o2) -> o2 - o1); /* [5,4,3,2,1] */
// 오름차순 정렬
Arrays.sort(numbers, (o1, o2) -> o1 - o2); /* [1,2,3,4,5] */
3. 특정 범위 정렬
int[] arr = { 3,2,0,1,4 };
// Arrays.sort(배열, fromIndex, toIndex);
Arrays.sort(arr, 0, 3); // 배열 요소 0, 1, 2 만 정렬 [0, 2, 3, 1, 4]
2차원 배열
1. 사용자 정의 정렬
int[][] arr = new int[][]{{5,40},{3,50},{1,30},{4,20},{2,10}};
// 1. Comparator 익명 클래스 구현
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0]; // 첫번째 숫자 기준 오름차순 {1,30}{2,10}{3,50}{4,20}{5,40}
//return o2[0]-o1[0]; // 첫번째 숫자 기준 내림차순 {5,40}{4,20}{3,50}{2,10}{1,30}
//return o1[1]-o2[1]; // 두번째 숫자 기준 오름차순 {2,10}{4,20}{1,30}{5,40}{3,50}
//return o2[1]-o1[1]; // 두번째 숫자 기준 내림차순 {3,50}{5,40}{1,30}{4,20}{2,10}
}
});
// 2. Lambda 사용
Arrays.sort(arr, (o1, o2) -> {
return o1[0]-o2[0]; // 첫번째 숫자 기준 오름차순 {1,30}{2,10}{3,50}{4,20}{5,40}
});
// 3. 다중 조건
int[][] arr2 = new int[][]{{5,40},{3,50},{1,30},{4,20},{2,10},{5,10}};
Arrays.sort(arr2, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]!=o2[0] ? o1[0]-o2[0] : o1[1]-o2[1]; // 첫번째 기준 오름차순 > 두번째 기준 오름차순 {1,30}{2,10}{3,50}{4,20}{5,10}{5,40}
//return o1[0]!=o2[0] ? o1[0]-o2[0] : o2[1]-o1[1]; // 첫번째 기준 오름차순 > 두번째 기준 내림차순 {1,30}{2,10}{3,50}{4,20}{5,40}{5,10}
}
});
2. Comparator.comparing() 정렬
int[][] arr = new int[][]{{5,40},{3,50},{1,30},{4,20},{2,10}};
// 3. Comparator.comparing()
Arrays.sort(arr, Comparator.comparingInt((int[] o) -> o[0])); // 첫번째 숫자 기준 오름차순 : {1,30}{2,10}{3,50}{4,20}{5,40}
Arrays.sort(arr, Comparator.comparingInt((int[] o) -> o[0]).reversed()); // 첫번째 숫자 기준 내림차순 : {5,40}{4,20}{3,50}{2,10}{1,30}
Arrays.sort(arr, Comparator.comparingInt((int[] o) -> o[1])); // 두번째 숫자 기준 오름차순 : {2,10}{4,20}{1,30}{5,40}{3,50}
Arrays.sort(arr, Comparator.comparingInt((int[] o) -> o[1]).reversed()); // 두번째 숫자 기준 내림차순 : {3,50}{5,40}{1,30}{4,20}{2,10}
2. 컬렉션
1. sort 정렬
List<String> list = new ArrayList<>(Arrays.asList("b", "a", "c"));
//오름차순
Collections.sort(list); // ["a", "b", "c"]
list.sort(null); // Comparator를 null로 넘기면 자연 정렬 순서(Comparable)를 따름 ["a", "b", "c"]
//내림차순
Collections.sort(list, Comparator.reverseOrder()); // ["c", "b", "a"]
list.sort(Comparator.reverseOrder()); // ["c", "b", "a"]
2. 사용자 정의 정렬
// 1. 단일 조건
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2));
// 내림차순 정렬
Collections.sort(list, (a, b) -> b.compareTo(a)); // [3, 2, 1]
// 2. 다중 조건
List<Student> students = new ArrayList<>();
students.add(new Student("Kim", 30));
students.add(new Student("Lee", 20));
students.add(new Student("Park", 30));
// 2-1 람다식을 사용하지 않는 Comparator 익명 클래스 구현
Comparator<Student> multiComparator = new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 1차 정렬 기준: 나이(age) 오름차순
int ageComparison = Integer.compare(o1.age, o2.age);
// 만약 나이가 같지 않다면 (ageComparison이 0이 아니라면), 나이 비교 결과를 바로 반환
if (ageComparison != 0) {
return ageComparison;
}
// 2차 정렬 기준: 나이가 같다면 이름(name) 내림차순
// String.compareTo()는 오름차순 기준. 내림차순을 원하므로 결과를 반전시킴
return o2.name.compareTo(o1.name); // o2.compareTo(o1)
}
};
// 컬렉션 정렬 메서드에 익명 클래스 인스턴스를 전달하여 정렬
Collections.sort(students, multiComparator);
// 2-2 람다식 사용
// 나이(age) 기준 오름차순 정렬 (
students.sort((o1, o2) -> o1.age - o2.age);
// 만약 나이가 같으면 이름(name) 기준으로 오름차순 정렬
students.sort(Comparator.comparing(s -> s.age) // 1. 나이로 1차 정렬
.thenComparing(s -> s.name)); // 2. 나이가 같으면 이름으로 2차 정렬
- Comparable: 객체 내부에 정렬 기준을 정의할 때 (compareTo() 메서드 구현). 단 하나의 정렬 기준만 가질 수 있다.
- Comparator: 객체 외부에 정렬 기준을 정의할 때 (compare() 메서드 구현). 여러 정렬 기준을 필요에 따라 적용할 수 있다.
https://ifuwanna.tistory.com/328
[Java] 2차원 배열 정렬 (오름차순, 내림차순, 다중 조건)
> 2차원 배열을 오름차순, 내림차순, 이외에 원하는 조건 등 여러가지 방법으로 정렬 하는 방법을 포스팅 합니다. 2차원 배열을 바로 Arrray.sort()를 통해 정렬하려고 하면 java.lang.ClassCastException: I ca
ifuwanna.tistory.com
| 잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |

반응형
'Java > Java' 카테고리의 다른 글
| [Java] LocalTime , LocalDate의 타입변환 (0) | 2025.12.17 |
|---|---|
| [Java] 자주 사용하는 타입(String, Int, Char) 변환 방법 (0) | 2025.12.02 |
| [Java] 피보나치 수열 구현 (0) | 2025.11.13 |
| [Java] 정규표현식(regex) 정리 (1) | 2024.12.08 |
| [Java] break, contiune문 사용법 (0) | 2024.11.24 |
