유사한 -java.lang.Comparable: int compareTo(Object o1)
비교 대상은 자신을 다른 대상과 비교할 수 있습니다. 클래스 자체는 인스턴스를 비교할 수 있도록 java.lang.Comparable 인터페이스를 구현해야합니다.
- 현재 개체와 제공된 개체를 비교할 수 있습니다.
- 이것을 사용하여 우리는 구현할 수 있습니다
only one sort sequence
하여 인스턴스 속성을 기반으로 있습니다. 전의:Person.id
- String, Wrapper 클래스, Date, Calendar와 같은 미리 정의 된 클래스 중 일부는 Comparable 인터페이스를 구현했습니다.
비교기 -java.util.Comparator: int compare(Object o1, Object o2)
비교기 객체는 두 개의 다른 객체를 비교할 수 있습니다. 클래스는 인스턴스를 비교하지 않고 다른 클래스의 인스턴스를 비교합니다. 이 비교기 클래스는 java.util.Comparator 인터페이스를 구현해야합니다.
- 동일한 유형의 두 개체를 비교할 수 있습니다.
- 이를 사용
many sort sequence
하여 인스턴스 속성을 기반으로 각각을 구현 하고 이름 을 지정할 수 있습니다. 전의:Person.id, Person.name, Person.age
- 사용자 정의 정렬을 위해 사전 정의 된 클래스에 Comparator 인터페이스를 구현할 수 있습니다.
예:
public class Employee implements Comparable<Employee> {
private int id;
private String name;
private int age;
private long salary;
// Many sort sequences can be created with different names.
public static Comparator<Employee> NameComparator = new Comparator<Employee>() {
@Override
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
};
public static Comparator<Employee> idComparator = new Comparator<Employee>() {
@Override
public int compare(Employee e1, Employee e2) {
return Integer.valueOf(e1.getId()).compareTo(Integer.valueOf(e2.getId()));
}
};
public Employee() { }
public Employee(int id, String name, int age, long salary){
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
// setters and getters.
// Only one sort sequence can be created with in the class.
@Override
public int compareTo(Employee e) {
//return Integer.valueOf(this.id).compareTo(Integer.valueOf(e.id));
//return Character.toString(this.name.charAt(0)).compareToIgnoreCase(Character.toString(e.name.charAt(0)));
if (this.id > e.id) {
return 1;
}else if(this.id < e.id){
return -1;
}else {
return Character.toString(this.name.charAt(0)).compareToIgnoreCase(Character.toString(e.name.charAt(0)));
}
}
public static void main(String[] args) {
Employee e1 = new Employee(5, "Yash", 22, 1000);
Employee e2 = new Employee(8, "Tharun", 24, 25000);
List<Employee> list = new ArrayList<Employee>();
list.add(e1);
list.add(e2);
Collections.sort(list); // call @compareTo(o1)
Collections.sort(list, Employee.nameComparator); // call @compare (o1,o2)
Collections.sort(list, Employee.idComparator); // call @compare (o1,o2)
}
}
- 사용자 정의 정렬을 위해 우리는 비교기 @compare (o1, o2)로 이동합니다. 다른 시나리오에서는 비교기 @compareTo (o1)로 이동합니다. 하나 이상의 필드를 정렬하려면 코드를 변경하지 않고 비교기를 사용합니다.
를 들어 자바 8 람다 : 비교기는 내 게시물을 참조하십시오.