본문 바로가기

Java/본격 Java 컬렉션

[Java] Comparator 개념 및 실습

Comparator는 Comparable과 성질을 똑같다. 다만 입력받는 객체의 갯수가 다르다.

Comparator는 2개의 동일한 성질의 객체를 입력받아야하고

Comparable은 하나만 입력받아도 된다.

그럼 비교해보기 위해 클래스를 만든다

.

.

package Set;

public class Fruit {
	public String name;
	public int price;
	
	public Fruit(String name, int price) {
		this.name = name;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Fruit [name=" + name + ", price=" + price + "]";
	}
	
	
}

.

.

그리고 비교하기 위해서 Comparator 클래스를 따로 생성한다.

.

.

package Set;

import java.util.Comparator;

public class DescendingComparatorEx2 implements Comparator<Fruit>{

	// 과일의 가격을 기준으로 정렬
	@Override
	public int compare(Fruit o1, Fruit o2) {
		if(o1.price < o2.price) return 1;
		else if(o1.price == o2.price) return 0;
		else return -1;
	}

}

.

.

여기서 Comparator 인터페이스를 상속받아야한다.

제네릭타입은 우리가 입력받고 싶은 타입으로 지정한다.

이번에는 내림차순으로 정리하기위해 앞에서 했던 조건을 반대로 적었다.

.

.

package Set;
import java.util.*;
public class ComparatorEx1 {

	public static void main(String[] args) {
		TreeSet<Fruit> tSet = new TreeSet<Fruit>(new DescendingComparatorEx2());
		
		tSet.add(new Fruit("Grape", 5000));
		tSet.add(new Fruit("Water Melon", 10000));
		tSet.add(new Fruit("Strawberry", 3000));
		
		// 첫번째 출력 방법
		for(Fruit f : tSet) {
			System.out.println(f);
		}
		System.out.println();
		
		// 두번째 출력 방법
		Iterator<Fruit> it = tSet.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

}

.

.

.

.

가격을 기준으로 내림차순으로 정리해봤다.

출력방법을 두가지를 사용하였다.

advanced for문과 Iterator를 이용하여 출력하는 방법 2가지를 사용하였다.

728x90
반응형

'Java > 본격 Java 컬렉션' 카테고리의 다른 글

[Java] Map을 이용하여 로그인 시스템 구현하기  (0) 2020.07.14
[Java] HashMap 개념 및 실습  (0) 2020.07.14
[Java] Comparable 개념 및 실습  (0) 2020.07.14
[Java] TreeSet 개념  (0) 2020.07.13
[Java] HashSet 개념  (0) 2020.07.13