본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

다양한 정렬 요구에 대응하다, Compartator와 Comparable 인터페이스

Compartator와 Comparable 인터페이스

정렬에 필요한 메서드를 정의할 수 있다.

활용함으로써 다양한 정렬 요구에 대응할 수 있다. 

Arrays.sort()호출시 배열이 정렬되는것은 사실 Character클래스의 Comparable 구현에 의해 정렬된것.

https://standout.tistory.com/1373#code_1707100313490

 

배열을 다루는데 유용한 메서드, Arrays

Arrays 배열을 다루는데 유용한 메서드가 정의됨. copyOf() 배열의 복사본을 반환합니다. 새로운 길이가 지정된 경우 새 배열의 길이가 됩니다. int[] array = {1, 2, 3, 4, 5}; int[] copiedArray = Arrays.copyOf(array,

standout.tistory.com

 

Comparable 인터페이스
정렬 기준을 구현

compareTo(T o), 객체를 다른 객체와 비교하여 정렬 순서를 결정

현재 객체가 다른 객체보다 작으면 음수를 반환하고, 현재 객체가 다른 객체보다 크면 양수를 반환

public interface Comparable<T> {
    int compareTo(T o);
}
import java.util.ArrayList;
import java.util.Collections;

class Student implements Comparable<Student> {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(Student student) {
        return this.age - student.age;
    }
}

public class ComparableExample {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("John", 20));
        students.add(new Student("Alice", 22));
        students.add(new Student("Bob", 18));

        Collections.sort(students);

        for (Student student : students) {
            System.out.println(student.getName() + " - " + student.getAge() + " years old");
        }
    }
}

//Bob - 18 years old
//John - 20 years old
//Alice - 22 years old



Comparator 인터페이스

두 개의 객체를 비교하기 위한 사용자 정의 비교 기준을 제공 

compare(T o1, T o2)  두 번째 인수로 전달되어 사용자가 지정한 방식으로 정렬

나이, 이름, 또는 다른 사용자 지정 조건에 따라 객체를 정렬할 수 있다.

첫 번째 객체가 두 번째 객체보다 작으면 음수를 반환하고, 첫 번째 객체가 두 번째 객체보다 크면 양수를 반환

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

* equals(Object obj) Comparator의 동등성을 확인하는 데 사용

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

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("John", 20));
        students.add(new Student("Alice", 22));
        students.add(new Student("Bob", 18));

        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                return s1.getName().compareTo(s2.getName());
            }
        });

        for (Student student : students) {
            System.out.println(student.getName() + " - " + student.getAge() + " years old");
        }
    }
}

//Alice - 22 years old
//Bob - 18 years old
//John - 20 years old