늦은 프로그래밍 이야기
[Java] ArrayList 정렬하기 본문
Collections.sort()
public static void sort(List<T> list)
public static void sort(List<T> list, Comparator<? super T> c)
오름차순
Collections.sort(list);
ArrayList를 오름차순으로 정렬한다.
내림차순
Collections.sort(list, Collections.reverseOrder());
Collections.sort()의 2번째 파라미터로 내림차순 정렬을 나타내는 Comparator를 전달해서 ArrayList를 내림차순으로 정렬한다.
대소문자 구분없이 정렬
Collections.sort(list, String.CASE_INTENSITIVE_ORDER);
String.CASE_INTENSITIVE_ORDER를 전달하면, 대소문자 구분없이 오름차순으로 정렬된다.
Collections.sort(list, Collections.reverseOrder(String.CASE_INTENSITIVE_ORDER));
대소문자 구분 없이, 내림차순으로 정렬한다.
List.sort()
default void sort(Comparator <? super E> c)
오름차순
list.sort(Comparator.naturalOrder());
내림차순
list.sort(Comparator.reverseOrder());
대소문자 구분없이 정렬
오름차순
list.sort(String.CASE_INSENSITIVE_ORDER);
내림차순
list.sort(Comparator.reverseOrder(String.CASE_INSENSITIVE_ORDER));
사용자 정의
- 사용자가 정의한 객체를 사용자가 원하는 방식으로 정렬하기 위해서 Comparable 인터페이스를 구현하여 객체의 정렬 방식을 지정할 수 있다.
- Comparator 인터페이스를 구현하여 Custom Comparator를 직접 만들 수도 있다.
Comparable
- Collections.sort() 메소드는 객체를 정렬할 때 해당 객체의 Comparable을 구현한 CompareTo() 메소드를 참조하여 정렬 순서를 결정한다.
- 따라서, 정렬할 객체가 Comparable Interface를 구현하고, CompareTo() 메소드 안에 정렬 기준이 정의 된다면, Collections.sort() 메소드를 사용하여 객체를 정렬할 수 있다.
import java.util.ArrayList;
import java.util.Collections;
class Fruit implements Comparable<Fruit> {
private String name;
private int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Fruit fruit) {
if (fruit.price < price) {
return 1;
} else if (fruit.price > price) {
return -1;
}
return 0;
}
@Override
public String toString() {
return "[ " + this.name + ": " + this.price + " ]";
}
}
public class SortArrayList {
public static void main(String[] args) {
// ArrayList 준비
ArrayList<Fruit> list = new ArrayList<>();
list.add(new Fruit("Apple", 2000));
list.add(new Fruit("Orange", 3000));
list.add(new Fruit("Banana", 1000));
System.out.println("원본 : " + list); // [[ Apple: 2000 ], [ Orange: 3000 ], [ Banana: 1000 ]]
// price순 오름차순으로 정렬
Collections.sort(list);
System.out.println("오름차순 : " + list); // [[ Banana: 1000 ], [ Apple: 2000 ], [ Orange: 3000 ]]
// price순 내림차순으로 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println("내림차순 : " + list); // [[ Orange: 3000 ], [ Apple: 2000 ], [ Banana: 1000 ]]
}
}
Comparator
- 사용자가 직접 Comparator Interface를 implements하여 Comparator를 만들 수 있다.
- Comparator는 Collections.sort() 또는 List.sort() 메소드의 파라미터로 전달되어 정렬의 기준이 된다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Fruit {
String name;
int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "[ " + this.name + ": " + this.price + " ]";
}
}
class FruitPriceComparator implements Comparator<Fruit> {
@Override
public int compare(Fruit f1, Fruit f2) {
if (f1.price > f2.price) {
return 1;
} else if (f1.price < f2.price) {
return -1;
}
return 0;
}
}
class FruitNameComparator implements Comparator<Fruit> {
@Override
public int compare(Fruit f1, Fruit f2) {
return f1.name.compareTo(f2.name);
}
}
public class SortArrayList {
public static void main(String[] args) {
// ArrayList 준비
ArrayList<Fruit> list = new ArrayList<>();
list.add(new Fruit("Apple", 2000));
list.add(new Fruit("Orange", 3000));
list.add(new Fruit("Banana", 1000));
System.out.println("원본 : " + list); // [[ Apple: 2000 ], [ Orange: 3000 ], [ Banana: 1000 ]]
// price순 오름차순으로 정렬
Collections.sort(list, new FruitPriceComparator());
System.out.println("price 순 오름차순 : " + list); // [[ Banana: 1000 ], [ Apple: 2000 ], [ Orange: 3000 ]]
// price순 내림차순으로 정렬
Collections.sort(list, new FruitPriceComparator().reversed());
System.out.println("price 순 내림차순 : " + list); // [[ Orange: 3000 ], [ Apple: 2000 ], [ Banana: 1000 ]]
// name순 오름차순으로 정렬
Collections.sort(list, new FruitNameComparator());
System.out.println("price 순 오름차순 : " + list); // [[ Apple: 2000 ], [ Banana: 1000 ], [ Orange: 3000 ]]
// name순 내림차순으로 정렬
Collections.sort(list, new FruitNameComparator().reversed());
System.out.println("price 순 내림차순 : " + list); // [[ Orange: 3000 ], [ Banana: 1000 ], [ Apple: 2000 ]]
}
}
- 2개의 Comparator를 정의한다.
- FruitPriceComparator - price 순으로 정렬
- FruitNameComparator - name 순으로 정렬
- 오름차순으로 정렬하기 위해서는 compare() 메소드의
- 첫번째 파라미터 > 두번째 파라미터 이면 양수,
- 첫번째 파라미터 < 두번째 파라미터 이면 음수,
- 같으면 0을 리턴해야 한다.
- FruitNameComparator의 경우 compare() 메소드 안에서 문자열을 비교하기 위해 사용된 compareTo() 메소드가 문자열의 크기 순서에 따라 양수, 0, 음수를 리턴하기 때문에 조건문 없이 compareTo()에서 리턴하는 값을 그대로 리턴한다.
출처 :
[Java] ArrayList 정렬하기 (오름차순, 내림차순, 사용자 정의)
[Java] ArrayList 정렬하기 (오름차순, 내림차순, 사용자 정의)
Collections.sort() 오름차순으로 정렬하기 내림차순으로 정렬하기 대소문자 구분없이 정렬하기 List.sort() - Java 8 이후 오름차순으로 정렬하기 내림차순으로 정렬하기 대소문자 구분없이 정렬하기 사
hianna.tistory.com
'내일배움캠프 > 자료구조 알고리즘' 카테고리의 다른 글
| [Java] int형 숫자 각각의 자릿수 구하기 (0) | 2022.12.20 |
|---|---|
| 자바 알고리즘 (2차원 배열) (0) | 2022.12.06 |
| 알고리즘 타임어택 오답노트 (0) | 2022.11.16 |
| 그래프, DFS & BFS, Dynamic Programming (1) | 2022.11.14 |
| 해쉬 (0) | 2022.11.14 |
Comments