如何使用Collections.sort对List排序
程序员文章站
2022-04-17 11:22:41
...
针对集合元素排序,在项目中还是比较常见,最近因为项目中有遇到,总结如下:
对List元素排序实现方法大家都知道用Collections.sort();首先给大家介绍一下Comparable与Comparator的接口的区别。
1.Comparable是对象内部需要实现的接口,如果一个对象要想用利用Array.sort进行排序,那么这个对象必须实现Comparable的接口,比较的实现规则是在对象的内部进行的,然后直接调用Collections.sort()即可。
2.Comparator接口是在对象外实现的接口,主要是方便了对没有实现Comparable接口的对象的比较和排序,比如:当我们对已经有的 一个类进行排序的时候,这个类又没有实现Comparable接口,那么我们可以利用Collections.sort(list,mew Comparator<?>(){})来排序,同时实现一个 Comparator接口实现对这个类的排序。
以下两个例子分别详细说明:实现对User类先按照名字字母先后顺序排序,名字相同情况下,再按照年龄大小排序
测试代码如下:
1、在对象内部实现具体的排序规则
User类:
2、在对象外部实现具体的排序规则(推荐使用)
User类:
两种方法运行结果:
对List元素排序实现方法大家都知道用Collections.sort();首先给大家介绍一下Comparable与Comparator的接口的区别。
1.Comparable是对象内部需要实现的接口,如果一个对象要想用利用Array.sort进行排序,那么这个对象必须实现Comparable的接口,比较的实现规则是在对象的内部进行的,然后直接调用Collections.sort()即可。
2.Comparator接口是在对象外实现的接口,主要是方便了对没有实现Comparable接口的对象的比较和排序,比如:当我们对已经有的 一个类进行排序的时候,这个类又没有实现Comparable接口,那么我们可以利用Collections.sort(list,mew Comparator<?>(){})来排序,同时实现一个 Comparator接口实现对这个类的排序。
以下两个例子分别详细说明:实现对User类先按照名字字母先后顺序排序,名字相同情况下,再按照年龄大小排序
测试代码如下:
1、在对象内部实现具体的排序规则
User类:
public class User implements Comparable<Object>{ //年龄 private Integer age; //名字 private String name; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //排序方法内部实现 @Override public int compareTo(Object o) { User user = (User)o; //step1、先按照名字字母顺序排序 if(this.getName() != null && user.getName() != null && 0 != this.getName().compareTo(user.getName())){ return this.getName().compareTo(user.getName()); }else{ //step2、 针对名字相同的再按照然后按照年龄大小排序 if (this.getAge() != null && user.getAge() != null) { return this.getAge() - user.getAge(); } return 0; } } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestUserSort { public TestUserSort(){ } //sort实现按照名字、年龄大小排序 public static List<User> sortUser(){ List<User> userList = new ArrayList<User>(); String[] nameArry = {"ab","ccddd","ab","cd","faaa","ab"}; Integer[] ageArry = {3,6,9,4,7,1}; for(int i=0;i<6;i++){ User user = new User(); user.setName(nameArry[i]); user.setAge(ageArry[i]); userList.add(user); } return userList; } public static void main(String[] args){ List<User> userList = sortUser(); Collections.sort(userList); for(User us : userList){ System.out.println(us.getName()+"的年龄是:"+us.getAge()); } } }
2、在对象外部实现具体的排序规则(推荐使用)
User类:
public class User{ //年龄 private Integer age; //名字 private String name; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Comparator; public class TestUserSort { public TestUserSort(){ } //sort实现按照名字、年龄大小排序 public static List<User> sortUser(){ List<User> userList = new ArrayList<User>(); String[] nameArry = {"ab","ccddd","ab","cd","faaa","ab"}; Integer[] ageArry = {3,6,9,4,7,1}; for(int i=0;i<6;i++){ User user = new User(); user.setName(nameArry[i]); user.setAge(ageArry[i]); userList.add(user); } return userList; } public static void main(String[] args){ List<User> userList = sortUser(); Collections.sort(userList, new Comparator<User>(){ public int compare(User o1,User o2){ //step1、先按照名字字母顺序排序 if(o1.getName() != null && o2.getName() != null && 0 != o1.getName().compareTo(o2.getName())){ return o1.getName().compareTo(o2.getName()); }else{ //step2、 针对名字相同的再按照然后按照年龄大小排序 if (o1.getAge() != null && o2.getAge() != null) { return o1.getAge() - o2.getAge(); } return 0; } } }); for(User us : userList){ System.out.println(us.getName()+"的年龄是:"+us.getAge()); } } }
两种方法运行结果:
ab的年龄是:1 ab的年龄是:3 ab的年龄是:9 ccddd的年龄是:6 cd的年龄是:4 faaa的年龄是:7
推荐阅读
-
python使用sorted函数对列表进行排序的方法
-
Python使用sorted对字典的key或value排序
-
sqlserver使用hibernate对中文数字进行排序
-
Excel使用空值条件对合并单元格记录进行排序以2007版为例
-
data loader怎么用 如何使用data loader对SalesForce数据进行导入、导出和删除
-
python使用ORM之如何调用多对多关系
-
像使用SQL一样对List对象集合进行排序
-
oracle使用order by排序null值如何处理
-
如何使用Matrix对bitmap的旋转与镜像水平垂直翻转
-
基于python list对象中嵌套元组使用sort时的排序方法