HIGH JAVA DAY4 - List Sort

어뮤즈온·2021년 1월 19일
0

고급자바

목록 보기
6/7
post-custom-banner

정렬

정렬과 관련된 interface는 Comparable, Comparator 이렇게 두 가지가 있다.

  1. Comparable
  • Comparable은 Collection에 추가되는 데이터 자체에 정렬기준을 넣고 싶을 때(내부 정렬 기준) 구현하는 interface이다.
  • Comparable에서는 compareTo( ) 메서드를 재정의 한다.
  • String 클래스, Wrapper 클래스, Date 클래스, File 클래스에는 내부 정렬 기준이 구현되어 있다.(내부 정렬 기준은 보통 오름차순으로 처리되도록 구현되어 있다.)
  1. Comparator
  • Comparator는 외부에 별도로 정렬 기준을 구현하고 싶을 때 구현(외부 정렬 기준)하는 interface이다.
  • Comparator에서는 compare( ) 메서드를 재정의 해야 한다.
public class ListSortTest {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		
		list.add("일지매");
		list.add("홍길동");
		list.add("성춘향");
		list.add("변학도");
		list.add("이순신");

		System.out.println("정렬 전 : " + list);
		//정렬 전 : [일지매, 홍길동, 성춘향, 변학도, 이순신]	
	}
}

Collection의 정렬은 Collections.sort( ) 메서드를 이용한다.

형식1) Collections.sort(리스트);

 =⇒ 내부 정렬 기준이 구현되어 있는 데이터 일 경우에 사용 가능
public static void main(String[] args) {
	Collections.sort(list); //default 오름차순
	System.out.println("정렬 후 : " + list);
	//정렬 후 : [변학도, 성춘향, 이순신, 일지매, 홍길동]

	Collections.shuffle(list); //데이터 섞기
	System.out.println("자료 섞기 후 : " + list);
	//자료 섞기 후 : [일지매, 이순신, 변학도, 성춘향, 홍길동]
}

형식2) Collections.sort(리스트, 외부 정렬 기준 객체의 인스턴스);

       =⇒ 외부 정렬 기준에 맞게 정렬한다.

compare( ) 메서드

  1. compare( ) 메서드를 이용해서 정렬 기준을 정해 준다.
  2. compare( ) 메서드의 반환값의 역할
  • 반환값이 0이면 두 값이 같다.
  • 반환값이 양수이면 앞, 뒤의 순서를 바꾼다.
  • 반환값이 음수이면 앞, 뒤의 순서를 바꾸지 않는다.

ex) 오름차순일 경우 =⇒ 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 구현하면 된다.

public static void main(String[] args) {
	// 외부 정렬 기준을 지정해서 정렬하기
	//Desc dd = new Desc();
	//Collections.sort(list, dd);
	Collections.sort(list, new Desc());
	// 객체 생성해도 다른 곳에 쓸 일이 없으므로 현재식이 효율적이다.
	System.out.println("내림차순 정렬 후 : " +  list);
	//내림차순 정렬 후 : [홍길동, 일지매, 이순신, 성춘향, 변학도]
}

//정렬 방식을 외부에서 정해주는 class 작성하기
//즉, 외부 정렬 기준 클래스 작성하기 ==> Comparator 인터페이스를 구현해야 한다.
class Desc implements Comparator<String> {
	@Override
	public int compare(String str1, String str2){
		//내림차순으로 정렬되도록 구현하기
		if(str1.compareTo(str2) > 0){ //내림차순인 상태
			return -1; //음수 반한하면 내림차순 상태
		}else if(str1.compareTo(str2) < 0){
			return 1;
		}else{
			return 0;
		}
	}
}
profile
Hello, world!
post-custom-banner

0개의 댓글