본문 바로가기

Algorithm/Inflearn

[Inflearn] 영리한 프로그래밍을 위한 알고리즘 - Sorting in Java

 

Arrays 클래스가 sort()라는 메서드로 int, char, String 등 primitive 타입 데이터를 자동으로 정렬해준다.

자동 정렬은 오름차순이 기본이며,

Collections.reverseOrder() 혹은 Comparator.naturalOrder()을 써 내림차순으로 만들어 줄 수 있다.

 

 

자세한 내용과 예제는 아래 링크를 참고하자.

https://rookie-programmer.tistory.com/52

 

[JAVA] Array sort, ArrayList sort (배열 정렬, ArrayList sort 정렬)

ArrayList 정렬 1. Collections.sort() import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class example { public static void main(String args[]) { ArrayList list = new ArrayList(Arrays.asList(4, 7, 5, 2, 9, 6)); //

rookie-programmer.tistory.com

 

 

 

List, ArrayList같은 데이터들은 Collections 클래스를 이용해 정렬한다.

 

 

 

 

사용자가 정의한 객체에 대해서도 Arrays.sort()가 사용가능하다.

하지만 Fruit 객체의 경우 문자열의 값과 정수 값 두 개를 가지고 있기 때문에 무엇을 기준으로 정렬되어야 할까?

 

 

 

Comparable 인터페이스의 compareTo() 메서드를 오버라이딩함으로써 "문자열" 혹은 "정수"를 기준으로 정렬하게 만들 수 있다.

위의 그림은 name 변수로 설정해주었기 때문에 "문자열"인 이름 순으로 정렬된다.

 

 

위의 그림은 quantitiy 변수로 설정해주었기 때문에 "정수"인 재고수량 순으로 정렬된다.

 

 

 

 

 

하지만 어떤 때에는 "문자열"순으로 정렬하고 어떤 때에는 "정수"순으로 정렬하고 싶다면? Comparator를 사용하면 된다.

 

 

 

이렇게 Comparator 인터페이스를 상속받아 compare() 메서드를 재정의하지만, 클래스 없이 재정의하고 있다

nameComparator와 quantComparator를 각각 하나씩 만들어두고 얘네만 사용할 거라서 굳이 클래스를 안만들고 객체만 사용해도 된다(이것을 이름 없는 클래스 혹은 익명 클래스라고 한다)

 

 

Comparator 객체들은 그냥 Fruit 클래스 안에 두고 필요할 때마다 Array.sort(배열, Comparator 객체) 형식으로 꺼내쓴다.