본문 바로가기

Java

[Java] 정렬(Sort) Comparator, Comparable

 

Comparable 인터페이스

 

최초의 기본정렬 기준을 세우는 데 사용한다.

Cmparable 인터페이스 구현

compareTo메서드를 오버라이딩 해준다.

두 값을 비교하여 비교하는 값보다 작으면 -1을 리턴, 비교하는 값보다 크면 1을 리턴, 같다면 0을 리턴한다.


 

Comparator 인터페이스

 

기본 정렬 이외의 다른 정렬 기준을 세우는 데 사용한다.

compare()를 오버라이딩 해준다.

매개변수 값으로 두개가 주어지면 o1, o2를 비교하여 정렬 기준을 정한다.

두 값을 비교하여 비교하는 값보다 작으면 -1을 리턴, 비교하는 값보다 크면 1을 리턴, 같다면 0을 리턴한다.

 

  • 예제 코드

 

Person.java

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

    @Override
    public int compareTo(Person o) {
        //나이를 기준으로 오름차순 정렬
        if(age < o.age) {
            return -1;
        } else if(age > o.age) {
            return 1;
        }
        return 0;
    }
 }

 

SortExam.java

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

public class SortExam2 {
    public static void main(String[] args) {

        List<Person> list = new ArrayList<Person>();
        list.add(new Person("조자바",23));
        list.add(new Person("이자바",99));
        list.add(new Person("강자바",58));
        list.add(new Person("오자바",77));
        list.add(new Person("유자바",62));

        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //이름을 기준으로 오름차순 정렬
                if(o1.getName().compareTo(o2.getName()) >0) {
                    return 1;  //1 자리를 바꾼        
                } else if(o1.getName().compareTo(o2.getName())<0) {
                    return -1;
                }
                return 0;
            }
        });
        System.out.println(list);
    }
 }

'Java' 카테고리의 다른 글

[Java] 쓰레드(Thread) 정리  (0) 2020.07.26
[Java] 입출력(IO) File, 직렬화(Serialization)  (0) 2020.07.25
[Java] 자료구조 List, Set, Map  (0) 2020.07.24
[Java] 입출력(IO) 정리  (0) 2020.07.22
[Java] 정규표현식(Regular Expression)  (0) 2020.07.20