• Home
  • About
    • Develop2r photo

      Develop2r

      안녕하세요 IT 개발자 임기남입니다. 한걸음 한걸음 나아가는 개발자를 꿈꾸고 있습니다.

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Algorithm

Comparable 와 Comparator

24 Jun 2020

Reading time ~1 minute

객체 정렬

Comparable

  • 정렬시 기본적으로 적용되는 기준을 정의
  • compareTo 메소드를 오버라이딩하여 기준 정의(오름차순 / 내림차순)
  • ex) Arrays.sort(array) / Collections.sort(list)

Comparator

  • 기본 정렬 기준과 다르게 정렬하고 싶을때 사용
  • compare 메소드를 오버라이딩하여 기준 정의(오름차순 / 내림차순)
  • ex) Arrays.sort(array,comparator) / Collections.sort(list,comparator) / comparator은 Comparator인터페이스를 상속받은 클래스

Arrays.sort 와 Collections.sort

  • Arrays.sort : 새로 정의한 클래스에 대해서는 TimSort(Merge Sort + Insertion Sort) 사용 기본자료형에 대해서는 Dual Pivot QuickSort(Quick Sort + Insertion Sort)를 사용
  • Collections.sort : 내부적으로 Arrays.sort 사용
package basic;

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

public class Comparable_Comparator {

	static class Person implements Comparable<Person>{
		String name;
		int power;
		
		public Person(String name, int power) {
			super();
			this.name = name;
			this.power = power;
		}

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

		@Override
		public int compareTo(Person p) {
			// TODO Auto-generated method stub
			return this.power - p.power;
		}
		
	}
	
	//파워 순으로 정렬
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		List<Person> list = new ArrayList<>();
		list.add(new Person("임기남",1000));
		list.add(new Person("현다이",3000));
		list.add(new Person("김싸피",2000));
		System.out.println("정렬전 : "+list.toString());
		
		
		Collections.sort(list);
		System.out.println("comparable 이용 오름차순 정렬후 : "+list.toString());
		
		Collections.sort(list,new Comparator<Person>() {

			@Override
			public int compare(Person o1, Person o2) {
				// TODO Auto-generated method stub
				return o2.power-o1.power;
			}
			
		});		
		System.out.println("comparator 이용 내림차순 정렬후 : "+list.toString());
	}

}

result


정렬전 : [Person [name=임기남, power=1000], Person [name=현다이, power=3000], Person [name=김싸피, power=2000]]
comparable 이용 오름차순 정렬후 : [Person [name=임기남, power=1000], Person [name=김싸피, power=2000], Person [name=현다이, power=3000]]
comparator 이용 내림차순 정렬후 : [Person [name=현다이, power=3000], Person [name=김싸피, power=2000], Person [name=임기남, power=1000]]

Reference

  • https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html


algorithmComparableComparator Share Tweet +1