首页 > 编程语言 >用Java集合中的Collections.sort方法对list排序的两种方法

用Java集合中的Collections.sort方法对list排序的两种方法

时间:2023-07-24 20:02:37浏览次数:50  
标签:sort Java name list public User return order


用Collections.sort方法对list排序有两种方法

第一种是list中的对象实现Comparable接口,如下:

 

 

	<strong>/**
02	* 根据order对User排序
03	*/
04	public class User implements Comparable{
05	    private String name;
06	    private Integer order;
07	    public String getName() {
08	        return name;
09	    }
10	    public void setName(String name) {
11	        this.name = name;
12	    }
13	    public Integer getOrder() {
14	        return order;
15	    }
16	    public void setOrder(Integer order) {
17	        this.order = order;
18	    }
19	    public int compareTo(User arg0) {
20	        return this.getOrder().compareTo(arg0.getOrder());
21	    }
22	}
23	</strong>

测试一下:

 


输出结果如下
a

 


第二种方法是根据Collections.sort重载方法来实现,例如:

 



	<strong>public class Test{
02	 
03	    public static void main(String[] args) {
04	        User user1 = new User();
05	        user1.setName("a");
06	        user1.setOrder(1);
07	        User user2 = new User();
08	        user2.setName("b");
09	        user2.setOrder(2);
10	        List list = new ArrayList();
11	        //此处add user2再add user1
12	        list.add(user2);
13	        list.add(user1);
14	        Collections.sort(list);
15	        for(User u : list){
16	            System.out.println(u.getName());
17	        }
18	    }
19	}</strong>
=

view source

 

	<strong>/**
02	* 根据order对User排序
03	*/
04	public class User { //此处无需实现Comparable接口
05	    private String name;
06	    private Integer order;
07	    public String getName() {
08	        return name;
09	    }
10	    public void setName(String name) {
11	        this.name = name;
12	    }
13	    public Integer getOrder() {
14	        return order;
15	    }
16	    public void setOrder(Integer order) {
17	        this.order = order;
18	    }
19	}</strong>


主类中这样写即可:

 

 

	<strong>public class Test{
02	    public static void main(String[] args) {
03	        User user1 = new User();
04	        user1.setName("a");
05	        user1.setOrder(1);
06	        User user2 = new User();
07	        user2.setName("b");
08	        user2.setOrder(2);
09	        List list = new ArrayList();
10	        list.add(user2);
11	        list.add(user1);
12	         
13	        Collections.sort(list,new Comparator(){
14	            public int compare(User arg0, User arg1) {
15	                return arg0.getOrder().compareTo(arg1.getOrder());
16	            }
17	        });
18	        for(User u : list){
19	            System.out.println(u.getName());
20	        }
21	    }
22	}
23	</strong>
 


 

输出结果如下
a
b
前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合: 


<strong>Collections.sort(list,new Comparator(){
02	            public int compare(User arg0, User arg1) {
03	 //            第一次比较专业
04	                int i = arg0.getOrder().compareTo(arg1.getOrder());
05	 
06	//            如果专业相同则进行第二次比较
07	            if(i==0){
08	//                第二次比较
09	                int j=arg0.getXXX().compareTo(arg1.getXXX());
10	//                如果学制相同则返回按年龄排序
11	                if(j==0){
12	                    return arg0.getCCC().compareTo(arg1.getCCC());
13	                }
14	                return j;
15	            }
16	            return i;
17	            }
18	        });
19	 
20	</strong>
 

标签:sort,Java,name,list,public,User,return,order
From: https://blog.51cto.com/u_16203469/6838428

相关文章

  • tokyotyrant-java客户端
    目录:概述演示[一]、概述java实现了对ttserver服务端的连接和访问。相关的源代码和jar包可以到其官网下载。官网地址:http://code.google.com/p/tokyotyrant-java/如果是maven构建项目的,在pom.xml的<dependencies>节点中增加如下依赖配置即可:1 <dependency>2<groupId>......
  • 为什么有一些什么方法都没有的接口会存在?比如java.lang.Cloneable
    /***Aclassimplementsthe<code>Cloneable</code>interfaceto*indicatetothe{@linkjava.lang.Object#clone()}methodthatit*islegalforthatmethodtomakea*field-for-fieldcopyofinstancesofthatclass.*<p>*Invo......
  • Java类加载
    Java类加载类加载过程加载:JVM将class文件加载到内存中,并生成class对象连接(验证、准备、解析):JVM校验class对象的规范性等初始化:JVM执行class对象中的静态代码块的语句和对静态变量的赋值操作使用:创建实例化对象、调用方法等卸载:类加载机制类加载源码protectedClass<?>lo......
  • java 中保留一位小数有以下几种方法
    使用String.format()方法,它可以按照指定的格式化字符串来输出数值,比如“%.1f”表示保留一位小数。例如:doublenum=3.14159;Stringresult=String.format("%.1f",num);//result="3.1"复制使用DecimalFormat类,它可以按照指定的模式来格式化数值,比如“#.#......
  • java并发编程(二)---上下文切换
    一、什么是上下文切换?  即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,线程会在分配的时间片内执行任务,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几......
  • Java Commons-Collections链分析
    CC1调用链代码执行的关键点InvokerTransformer.java transform(Objectinput) Classcls=input.getClass();Methodmethod=cls.getMethod(iMethodName,iParamTypes);returnmethod.invoke(input,iArgs);主要靠transform方法用反射的方式执行命令input......
  • 数组(Array)和链表(List)
    推荐https://cloud.tencent.com/developer/article/2304343引言在Java编程中,数组(Array)和链表(List)是常用的数据结构,用于在内存中存储和组织数据。两者都有各自的特点和适用场景,本文将深入比较数组与链表的区别,并结合代码示例进行详细解释。数组(Array)定义和特点数组是一种固定......
  • JavaScript数据结构和算法简述——数组
    为什么先讲数组数据结构可以简单的被分为线性结构和非线性结构。线性结构大致包括:数组(连续存储);链表(离散存储);栈(线性结构常见应用,由链表或数组增删和改进功能实现);队列(线性结构常见应用,由链表或数组增删和改进功能实现);非线性结构大致包括:树;图;其中,数组是应用最广泛的数据存储结构。它被......
  • JavaScript 需要清楚的10件事
    文/谢传贵  在学习JavaScript的过程中,最需要搞清楚的10件事是什么?关于这个问题有人在Quora上给出了的答案。其中提到了一些很有代表性的知识点(坑),但描述比较杂乱。下面我将在他的基础上进行重新编排和解释。希望对你学习JavaScript有些帮助(为避免文章跑题,以下内容先不考虑ES5......
  • 基于Java的日程管理系统开发
    完整资料进入【数字空间】查看——baidu搜索"writebug"摘要日程管理在日常生活中是十分普通的一件事情,人们无论在生活中还是工作中都会有大大小小、各种各样的事情安排,如果仅仅靠纸张或者自己记录这些事情,往往会遗忘。针对这样的痛点,本文提供了日程管理系统开发的一整套流程,从需求......