gpt4 book ai didi

java - Java中什么时候用Comparator,什么时候用Comparable?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:12 25 4
gpt4 key购买 nike

我有一个 Employee 类,它有 3 个字段,如下所示。

class Employee 
{
private int empId;
private String empName;
private int empAge;

public Employee(int empId, String empName, int empAge) {
this.empId = empId;
this.empName = empName;
this.empAge = empAge;
}

// setters and getters

为此我想根据员工姓名(empName)排序,如果多个员工同名,则根据员工id(empId)排序。

为此,我使用 java.util.Comparator 编写了一个自定义比较器,如下所示。

   class SortByName implements Comparator<Employee> 
{
public int compare(Employee o1, Employee o2) {
int result = o1.getName().compareTo(o2.getName());
if (0 == result) {
return o1.getEmpId()-o2.getEmpId();
} else {
return result;
}
}
}

我创建了 8 个 Employee 对象并添加到 ArrayList 中,如下所示。

    List<Employee> empList = new ArrayList<Employee>();

empList.add(new Employee(3, "Viktor", 28));
empList.add(new Employee(5, "Viktor", 28));
empList.add(new Employee(1, "Mike", 19));
empList.add(new Employee(7, "Mike", 19));
empList.add(new Employee(4, "Mark", 34));
empList.add(new Employee(6, "Jay", 34));
empList.add(new Employee(8, "Gayle", 10));
empList.add(new Employee(2, "Gayle", 10));

然后使用上面的比较器对列表进行如下排序。

Collections.sort(empList,new SortByName());

它工作得非常好。但这也可以使用 Comparable 来完成,如下所示。

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

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

//setters and getters

@Override
public int compareTo(Employee o) {
int result = this.getName().compareTo(o.getName());
if (0 == result) {
return this.getEmpId()-o.getEmpId();
} else {
return result;
}

}

}

使用 Collections.sort(empList) 对列表进行排序;

所以我想知道用例是什么,或者我们究竟在哪里使用这两者?我了解到 Comparable 用于自然排序并且可以仅使用一个字段进行排序,而 comparator 用于多个字段排序。但是如果我们看到我的例子,这两个接口(interface)都有能力做到这两个。因此,请解释一下这两种方法有哪些独特之处,而其他方法无法使用。

最佳答案

如果您想定义相关对象的默认(自然)排序行为,请使用Comparable,通常的做法是为此使用对象的技术或自然(数据库?)标识符.

如果你想定义一个外部可控的排序行为,使用Comparator,这可以覆盖默认的排序行为。您可以定义任意数量的排序行为,您可以根据需要使用它们。

关于java - Java中什么时候用Comparator,什么时候用Comparable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com