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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误记录Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )相关的知识,希望对你有一定的参考价值。





一、报错信息



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

打印之后没有进行排序 ;

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


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





二、解决方案



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());
        
    

执行结果 :

以上是关于错误记录Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )的主要内容,如果未能解决你的问题,请参考以下文章

java基础十二[集合与泛型](阅读Head First Java记录)

java arraylist 按照对象的属性排序

java中ArrayList排序

Java中数组的ArrayList排序

在java中,怎么样使ArrayList重新排序,倒转排序?

java 对象数组排序的问题,急急急急