【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

简介: 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

文章目录

一、报错信息

二、解决方案





一、报错信息


使用 Comparator 接口 , 对 ArrayList 集合中的元素排序无效 ;


打印之后没有进行排序 ;


错误代码就不贴出来了 , 随便搜索的代码 , 一用就出错 ;



Java 1.7 1.71.7 及以上的版本中 , Comparator 接口 compare 方法的返回值必须是一对相反的数值 , 如 − 1 -1−1 和 + 1 +1+1 ; 不能返回 1 11 和 0 00 ;






二、解决方案


Comparator 接口 正确的使用方法 :


   

list.sort(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 升序排序
                if (o1.age > o2.age) {
                    return 1;
                } else {
                    return -1;
                }
            }
        });



完整代码示例 :


import java.util.ArrayList;
import java.util.Comparator;
public class Sort {
    static class Student{
        String name;
        int age;
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    public static void main(String[] args) {
        // 构造对象
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("Tom", 18));
        list.add(new Student("Jerry", 14));
        list.add(new Student("Cat", 20));
        list.add(new Student("Mouse", 19));
        list.sort(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 升序排序
                if (o1.age > o2.age) {
                    return 1;
                } else {
                    return -1;
                }
            }
        });
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).toString());
        }
    }
}


执行结果 :


image.png

目录
相关文章
|
28天前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
16 0
|
1天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
4 0
Java接口中可以定义哪些方法?
|
3天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
15 0
|
7天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
25 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
9天前
|
存储 Java
java接口和内部类
java接口和内部类
|
11天前
|
缓存 安全 Java
Java中函数式接口详解
Java 8引入函数式接口,支持函数式编程。这些接口有单一抽象方法,可与Lambda表达式结合,简化代码。常见函数式接口包括:`Function&lt;T, R&gt;`用于转换操作,`Predicate&lt;T&gt;`用于布尔判断,`Consumer&lt;T&gt;`用于消费输入,`Supplier&lt;T&gt;`用于无参生成结果。开发者也可自定义函数式接口。Lambda表达式使实现接口更简洁。注意异常处理和线程安全。函数式接口广泛应用于集合操作、并行编程和事件处理。提升代码可读性和效率,是现代Java开发的重要工具。
26 0
|
11天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
34 0
|
12天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
20 4
|
14天前
|
Java
在Java中,定义一个接口的步骤如下
【4月更文挑战第6天】在Java中,定义一个接口的步骤如下
5 1
|
28天前
|
Java
【Java】Clonable 接口
【Java】Clonable 接口
11 1