Compartator와 Comparable 인터페이스
정렬에 필요한 메서드를 정의할 수 있다.
활용함으로써 다양한 정렬 요구에 대응할 수 있다.
Arrays.sort()호출시 배열이 정렬되는것은 사실 Character클래스의 Comparable 구현에 의해 정렬된것.
https://standout.tistory.com/1373#code_1707100313490
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
'JAVA' 카테고리의 다른 글
검색트리의 자료구조 형태로 데이터를 저장하는 컬렉션 클래스, TreeSet (0) | 2024.02.06 |
---|---|
Set인터페이스를 구현한 대표적인 컬렉션, HashSet (0) | 2024.02.06 |
배열을 다루는데 유용한 메서드, Arrays (0) | 2024.02.05 |
컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스 Iterator, Listterator, Enumeration (0) | 2024.02.05 |
LIFO인 Stack스텍, FIFO인 Queue큐, PriorityQueue와 Deque (0) | 2024.02.05 |