java - 用于在 java 中对对象数组列表进行排序的可比较和覆盖比较方法

标签 java arraylist comparable overriding

<分区>

我想根据对象的一个​​属性对对象数组列表进行排序,让我们在我的代码 'name' 中说,我搜索并发现关于使用 'Comparator' 这个选项,下面的类是我的对象:

public class PhoneBook{

long number;
String name;
String family;
String address;

public long getNumber() {
    return number;
}

public void setNumber(long number) {
    this.number = number;
}

public String getName() {
    return name;
}

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

public String getFamily() {
    return family;
}

public void setFamily(String family) {
    this.family = family;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

然后我重写排序方法中的“比较”方法,如下所示:

public void sort()
{
    Collections.sort(phoneBooks, new Comparator<PhoneBook>() {
        @Override
        public int compare(PhoneBook o1, PhoneBook o2) {
            return o1.getName().compareToIgnoreCase(o2.getName());
        }
    });
}

但我的问题是我很困惑为什么不在第一个代码中实现“Comparable”:

public class PhoneBook implements Comparable<PhoneBook>

sort 方法运行良好,实际上我尝试了上面的代码,它给了我错误,所以我删除了 implement 部分,但我看到它有效。

最佳答案

比较:

  1. Comparable 提供单一排序顺序。换句话说,我们 可以根据单个元素(如 id 或名称或价格等)对集合进行排序。
  2. Comparable 影响原类,修改实际类。
  3. Comparable 提供 compareTo() 方法对元素进行排序。
  4. 我们可以对Comparable类型的列表元素进行排序 Collections.sort(List) 方法。

比较器:

  1. 比较器提供多种排序顺序。换句话说,我们 可以根据多个元素对集合进行排序,例如 id、姓名、价格等

  2. 比较器不影响原始类,即实际类是 未修改。

  3. Comparator 提供了compare() 方法来对元素进行排序。

  4. 我们可以对Comparator类型的列表元素进行排序 Collections.sort(List,Comparator) 方法。

关于java - 用于在 java 中对对象数组列表进行排序的可比较和覆盖比较方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33988800/

相关文章:

c++ - 错误调用函数无法转换类型

java - 如何获取文件写入sd时的大小?

java - 如果使用 java 条件失败则跳过读取行

android - 如何序列化自定义 arraylist 对象并将其保存到 sqlite 数据库?

用于csv输出的java groovy分割数组

java - 如何将 Comparable[] 转换为 List<T>?

java - 如何使我自己的通用结构具有动态比较器

java - java字符串如何不可变?

需要 UNIX 服务器上保存的 CSV 文件的 Java 前端

java - Android 中的问答游戏无法获得分数