본문 바로가기
IT/자바

Comparator 너는 누구니?

by 독서실총무J 2017. 5. 19.
반응형

포스팅이 벌써 스무개가 넘었다

내자신에게 칭찬해주고 싶다

그간 괴로웠지만 잘 버텼다고 

앞으로 200개는 더 써야 하니까

조금만 더 버티자 하하


오늘은 제목을 색다르게 해보았다

뭔가 내 블로그는 생기가 없어보인다고

누가 그랬기 떄문이다 


하긴 방문자도 별로 없고 

혼자 끄적거리는 불쌍한 블로거 아닌가


그래도 다른사람들보다 내가 훨씬 나은점은

앞으로도 쓸 내용과 주제가 무진장

많이 남아서 걱정할 필요가 없다는거다


어떤 사람들은 보니까

주제 때문에 하루종일 고민하던데

그들에 비하면 얼마나 행복한건가?


어째보면 항상 초반엔

잡담을 너무 길게 하는것 같다

뭐 어쩌겠는가? 이렇게라도 때워야지


복습해보자

이번엔 Comparator이다


/*
	다음 클래스를 작성하시오.

	클래스명 :  BoardMarker
	
	멤버변수
	- maker : String
	- price : int
	- length : int

	1. BoardMarker를 가격으로 오름차순 정렬하시오. 
		단, 가격이 같은경우 길이로 내림차순 정렬하시오.
*/

import java.util.Arrays;
class BoardMarker implements Comparable {
	private String maker;
	private int price;
	private int length;
	
	public BoardMarker(String maker, int price, int length) {
		setMaker(maker);
		setPrice(price);
		setLength(length);
	}
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public int getLength() {
		return length;
	}
	public void setLength(int length) {
		this.length = length;
	}
	
	@Override
	public int compareTo(BoardMarker other) {
		int result = price - other.getPrice();
		if(result == 0) {
			result = (length - other.getLength()) * -1;
		}
		return result;
	}
	@Override
	public String toString() {
		return maker + "(" + price + ", " + length + ")";
	}
}
class SortEx1 {
	public static void main(String[] args) {
		BoardMarker[] arr = {
			new BoardMarker("monami", 2000, 10),
			new BoardMarker("java", 2000, 15),
			new BoardMarker("monami", 3000, 13),
			new BoardMarker("java", 3000, 16)
		};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		
	}
}


바로 시작할줄 알았나

그전에 했던 내용을 다시 한번

상기시켜보고 Comparator를 알아보자


사실, Comparable만 알면 자연히 알아야한다

사용하는게 거의 비슷하기 때문이다

약간의 차이점만 이해하면 된다


그것은 이 다음 예제에서 보기로 하고

이 코드를 한번 쳐보고 실행해보자


잘 모르겠다면 전 포스팅을 보도록 하자

당신이 제대로 알게 됨과 동시에

내 페이지뷰도 늘어나는 효과가 있다


import java.util.Arrays;
import java.util.Comparator;

class BoardMarkerComparator implements Comparator {
	@Override
	public int compare(BoardMarker b1, BoardMarker b2) {
		// 제조사로 오름차순 정렬
		// 단, 같은경우 가격으로 내림차순
		String maker1 = b1.getMaker();
		String maker2 = b2.getMaker();
		int result = maker1.compareTo(maker2);
		System.out.println(
			maker1 + "  " + maker2 + " -> "
			+ result
		);
		if(result == 0) {
			result = (b1.getPrice() - b2.getPrice()) * -1;
		}
		return result;
	}
}


class SortEx2 {
	public static void main(String[] args) {
		BoardMarker[] arr = {
			new BoardMarker("monami", 2000, 10),
			new BoardMarker("java", 2000, 15),
			new BoardMarker("monami", 3000, 13),
			new BoardMarker("java", 3000, 16)
		};
		BoardMarkerComparator cmp = new BoardMarkerComparator();
		// arr배열을 cmp가 규정한대로 정렬하라.
		Arrays.sort(arr, cmp);
		System.out.println(Arrays.toString(arr));
	}
}


코드를 쭈욱 보면 다른점이 눈에 보일것이다

그게 무엇일까?


그냥 단순하게 생각하자면

Comparator는 Comparable을 내가

사용하고 싶은대로 변경하는것이다

한마디로 정렬 규칙을 바꾸는것이다



딱히 설명할게 없어서 빨리 끝났다

솔직하게 말하면 너무 귀찮아져서

빨리 끝마치고 싶다


벌써 1시 반이니까

얼른 자고 내일도 복습을 해야겠다


반응형

'IT > 자바' 카테고리의 다른 글

자바 List and Set  (0) 2017.05.22
Collection 및 Iterator  (0) 2017.05.22
배열 정렬과 compareTo  (0) 2017.05.18
제네릭 사용법과 학급관리시스템  (0) 2017.05.17
가변형 인자와 배열 두번째  (0) 2017.05.16

댓글