错误记录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记录)