관리 메뉴

JumpUp

[JAVA 정렬] Comparable과 Comparator 본문

알고리즘

[JAVA 정렬] Comparable과 Comparator

yeunnnn 2021. 2. 26. 16:34

Java 정렬 방법

Arrays.sort() //배열 정렬

기본 정렬조건은 오름차순이다.

*Arrays.sort(배열, 시작인덱스, 종료인덱스) // index에 포함되는 구간만 정렬하는 것도 가능하다.

*Arrays.sort(배열, new Comparator<>())도 가능

Collections.sort()  //리스트를 정렬

java.util.Collections클래스의 static메소드인 sort()를 이용한다.

Collections클래스의 sort()메소드

위와 같이

sort(리스트) //오름차순 정렬, 이때 T는 comparable인터페이스를 구현한 타입이어야 한다.

sort(리스트, Comparactor) //기존 정렬 기준과 다른 방식으로 정렬할 때 사용

사용하는 메소드가 있다.

 

1. Comparable<T> 인터페이스 

compareTo(T other)

이 메소드만 오버라이딩 해주면 Collections.sort()의 매개변수로 리스트를 넘겨서 정렬을 할 수 있다.

기본적으로 오름차순, 문자열은 사전 순으로 정렬되도록 구현하고 있다.

 

2. Comparactor<T> 인터페이스 이용

사용자가 원하는 임의의 정렬 기준대로 정렬하고 싶을 때 구현하는 것이다.

compare() 메소드만 오버라이딩 해주면 된다.

그리고 나서 Collections.sort(리스트, Comparator인터페이스를 구현한 클래스의 인스턴스)해주면 정렬할 수 있다.

class student implements Comparator<String> {
    @Override
    public int compare(String o1, String o2){
    	//return o1.compareTo(o2); //오름차순
        return o2.compareTo(o1); //내림차순
    }
}
        

 

Comparator인터페이스 구현없이 Comparator인스턴스 생성과 동시에 compare()메서드를 오버라이드하는 것도 가능

 

Collections.sort(list, new Comparator<String>(){
	@Override
    public int compare(String o1, String o2){
    	return o2.compareTo(o1); //내림차순
   }
});
        

 

3. 자바 스트림 및 람다 이용 (자바8부터 가능)

String str = "ACBED";
String[] stringArr = str.split("");  // new String[] {"A","C","B","E","D"} 배열로 변환

 String streamSortASC = Stream.of(stringArr).sorted().collect(Collectors.joining());  //오름차순
 String streamSortDESC = Stream.of(stringArr).sorted(Comparator.reverseOrder()).collect(Collectors.joining()); // 내림차순
 
//Lambda
 String streamSortASC_Lambda = Stream.of(stringArr).sorted((o1,o2)->o1.compareTo(o2)).collect(Collectors.joining()); 
//오름차순
 String streamSortDESC_Lambda = Stream.of(stringArr).sorted((o1,o2)->o2.compareTo(o1)).collect(Collectors.joining()); 
// 내림차순

출처: 
https://ifuwanna.tistory.com/232
 [IfUwanna IT]

 

728x90