[JAVA] Comparable vs Comparator

humblechoi·2021년 2월 15일
0

자바

목록 보기
3/8
post-thumbnail

Comparable

package prepare;

/*
 * interface : Comparable, Comparator
 * 객체의 정렬과 관련된 인터페이스(비교)
 * Comparable : 클래스 내부에 객체의 정렬기준을 만들어 놓을 때 사용됨.
 * Comparator :  클래스 외부에 객체의 정렬기준을 만들어 놓을 때 사용됨.
 */

public class Writer implements Comparable<Writer>{
	int num;
	String name;
	int age;
	String title;
	
	public Writer(int num, String name, int age, String title) {
		super();
		this.num = num;
		this.name = name;
		this.age = age;
		this.title = title;
	}

	@Override
	public String toString() {
		return "Writer [num=" + num + ", name=" + name + ", age=" + age + ", title=" + title + "]";
	}

	@Override
	public int compareTo(Writer other) {
		int result = this.num - other.num;//num기준 오름차순 정렬
		return result;
	}
	
	
}

Comparator

package prepare;

import java.util.Comparator;

//Writer 클래스 name 기준으로 비교 후 정렬시켜 주는 클래스
public class WriterNameComparator implements Comparator<Writer>{

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

	@Override
	public int compare(Writer o1, Writer o2) {
		int result = o1.name.compareTo(o2.name);
		if(result == 0)
			return o1.title.compareTo(o2.title);//2번째 정렬기준
			//return o1.age - o2.age;
		
		return result;
	}

}

test

package prepare;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class WriterTest {

	public static void main(String[] args) {
		ArrayList<Writer> list = new ArrayList<Writer>();
		
		list.add(new Writer(3,"tommy",35,"hello java"));
		list.add(new Writer(2,"jane",45,"stop java"));
		list.add(new Writer(1,"bill",40,"sing java"));
		list.add(new Writer(4,"kim",22,"bye java"));
		list.add(new Writer(5,"tommy",55,"good java"));
	
	//Arrays.sort(list1);
	Collections.sort(list);//list:Comparable 타입의 객체이어야 한다.
	for(Writer w : list) {
		System.out.println(w.toString());
	}
	System.out.println();
	
	Collections.sort(list,new WriterNameComparator());
	for(Writer w : list) {
		System.out.println(w.toString());
	}
	
	//나이 기준 정렬 Comparator객체 지정
	Collections.sort(list, new Comparator<Writer>() {
		@Override
		public int compare(Writer o1, Writer o2) {
			return o1.age - o2.age;
		}//Comparator를 impl하는 무명객체
	});
	
	
	
	}
}
profile
지우의 블로그

0개의 댓글