[Java]Comparable, Comparator

고동이의 IT·2021년 10월 31일
0

Java

목록 보기
10/37
post-thumbnail

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

Comparable

  • Collection에 추가되는 데이터 자체의 정렬 기준을 넣고 싶을 때 구현하는 인터페이스이다. (내부 정렬기준 구현하기)
  • Comparable에서는 compareTo()메서드를 재정의해야한다.
  • String클래스, Wrapper 클래스, Date클래스, File 클래스에는 내부 정렬 기준이 구현되어 있다.
    (내부 정렬 기준은 오름차순으로 처리되도록 구현되어 있다.)

int 타입 비교할때는 A.compareToB; 쓰면안됨. 이건 String비교,,
ex. return Integer.compare(this.getNum(),o.getNum());

내부 정렬 기준 추가하기: Comparable 인터페이스를 구현한다.

getter, setter 잘 만들어줘야 골치 안아픔 ㅠ

예제) Member 클래스의 회원이름을 기준으로 오름차순 정렬이 되도록하는 내부정렬

class Member implements Comparable<Member>{ //회원관리 클래스 
	private int num; //회원번호
	private String name;
	private String tel;
	
	// alt+shift+s 누르면 생성자 자동생성
	public Member(int num, String name, String tel) {
		super();
		this.num = num;
		this.name = name;
		this.tel = tel;
	}

	public int getNum() {
		return num;
	}

	public String getName() {
		return name;
	}

	public String getTel() {
		return tel;
	}
	

	@Override
	public String toString() {
		return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
	}

	// 내부 정렬 기준을 설정하는 메서드 구현하기
	// (회원 이름의 오름차순 기준 설정)
	
	@Override
	public int compareTo(Member mem) {
		// TODO Auto-generated method stub
		return this.getName().compareTo(mem.getName());
		
	}
	
}

Comparator

  • 외부에 별도로 정렬 기준을 구현하고 싶을 때 사용하는 인터페이스이다.(외부정렬 기준 구현하기)
  • Comparator에서는 compare()메서드를 재정의해야한다.

compare메서드의 반환값
- 반환값이 0 : 두 값이 같다.
- 반환값이 양수: 두 값의 순서를 바꾼다.
- 반환값이 음수: 두 값의 순서를 바꾸지 않는다.
예) 오름차순일 경우: 앞의 값이 크면 양수, 같으면 0 / 뒤의 값이 크면 음수가 반환되도록 구현한다.

Collection Sort

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

Collections.sort(list);

정렬 방식을 정해주는 class만들기

(외부 정렬 기준 class만들기)

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;	
}
*/

return str1.compareTo(str2) * -1;
}

}

compareTo

문자열을 비교하여 그에 해당하는 int값을 반환한다.

A=A일경우 0을반환
A>B일 경우 1을반환 (좌측값이 큰경우)
A<B일 경우 -1을반환(좌측값이 작은경우)

즉 compareTo의 기본값은 오름차순임을 알 수 있음

String str1 = "AA";
String str2 = "AA";
String str3 = "BB";

 System.out.println(str1.compareTo(str2)); //결과는0
 System.out.println(str2.compareTo(str3)); //결과는-1
 System.out.println(str3.compareTo(str2)); //결과는1
 
 

예제) 내림차순 구현

@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;	
	}
	*/

     return str1.compareTo(str2) * -1;
	}
profile
삐약..뺙뺙

0개의 댓글