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

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

时间:2023-05-16 13:07:47浏览次数:49  
标签:sort Java name list public User return order


用Collections.sort方法对list排序有两种方法
[color=darkblue][b]第一种是list中的对象实现Comparable接口[/b][/color],如下:

/**
* 根据order对User排序
*/
public class User implements Comparable{
    private String name;
    private Integer order;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    public int compareTo(User arg0) {
        return this.getOrder().compareTo(arg0.getOrder());
    }
}


测试一下:


public class Test{

    public static void main(String[] args) {
        User user1 = new User();
        user1.setName("a");
        user1.setOrder(1);
        User user2 = new User();
        user2.setName("b");
        user2.setOrder(2);
        List list = new ArrayList();
        //此处add user2再add user1
        list.add(user2);
        list.add(user1);
        Collections.sort(list);
        for(User u : list){
            System.out.println(u.getName());
        }
    }
}




[color=darkblue][b]第二种方法是根据Collections.sort重载方法来实现,例如:[/b][/color]


/**
* 根据order对User排序
*/
public class User { //此处无需实现Comparable接口
    private String name;
    private Integer order;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
}


主类中这样写即可:


public class Test{
    public static void main(String[] args) {
        User user1 = new User();
        user1.setName("a");
        user1.setOrder(1);
        User user2 = new User();
        user2.setName("b");
        user2.setOrder(2);
        List list = new ArrayList();
        list.add(user2);
        list.add(user1);

        Collections.sort(list,new Comparator(){
            public int compare(User arg0, User arg1) {
                return arg0.getOrder().compareTo(arg1.getOrder());
            }
        });
        for(User u : list){
            System.out.println(u.getName());
        }
    }
}


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



[b][color=darkblue]多字段的场合:[/color][/b]


Collections.sort(list,new Comparator(){
            public int compare(User arg0, User arg1) {
 //            第一次比较专业
                int i = arg0.getOrder().compareTo(arg1.getOrder());

//            如果专业相同则进行第二次比较
            if(i==0){
//                第二次比较
                int j=arg0.getXXX().compareTo(arg1.getXXX());
//                如果学制相同则返回按年龄排序
                if(j==0){
                    return arg0.getCCC().compareTo(arg1.getCCC());
                }
                return j;
            }
            return i;
            }
        });

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

相关文章

  • BeanUtils beanjavaBean与Map互转
    importjava.lang.reflect.InvocationTargetException;importjava.util.Map;importorg.apache.commons.beanutils.BeanUtils;publicclasstest{publicstaticvoidmain(String[]args){Personperson1=newPerson();person1.......
  • java的urlRewriter
    现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter),看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().下......
  • JAVA基础(多线程Thread和Runnable的使用区别
    [color=red][size=x-large]两种定义方式[/size][/color]定义方式一:classTestThreadextendsThread{publicvoidrun(){........................}}Threadt=newTestThread();t.run()//或者t.start();定义方式二:Threadt=newRunnabl......
  • Java实现文件拷贝的4种方法.
    第一种方法:古老的方式publicstaticlongforJava(Filef1,Filef2)throwsException{longtime=newDate().getTime();intlength=2097152;FileInputStreamin=newFileInputStream(f1);FileOutputStreamout=newFileOutputStream(f2);byte[]buffer=newbyte......
  • tomcat startup.bat配置JAVA_HOME
    使用zip的tomcat包,不改变系统的环境变量JAVA_HOME的情况下启动:我用的是tomcat6.0.16在tomcat内部修改JAVA_HOME:bin/catalina.bat中头部添加setJAVA_HOME="D:\jdk\jdk1.6"估计在bin/startup.bat添加也可以,没有测试。要保留startup.bat运行的输出日志():修改startup.ba......
  • java实现zip与unzip
    jdk提供了Zip相关的类方便的实现压缩和解压缩。使用方法很简单。下边分别是压缩和解压缩的简单事例1,压缩的importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOut......
  • 使用java mail(jmail)通过gmail的stmp发送邮件:SSL方式
    [url]http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and-tries[/url]Transporttransport=session.getTransport("smtps");transport.connect(smtp_host,smtp_por......
  • 【Java】定时器CronExpression参数规则
    参考:定时器CronExpression配置说明详解-心和梦的方向-博客园(cnblogs.com) 项目中经常要使用到定时器,其中CronExpression配置非常重要。现在就配置说明详细解说一下:CronExpression表达式是由6个必需字段(秒、分、时、日、月、周)和一个可选字段(年)通过空格组成。cronExpres......
  • java基础(02)
    02-Java基础语法1.注释​ 注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/*这是多行注释文字这是多行注释文字这是多行注释文字*/注意:多行注释不能嵌套使用。文档注释:/**这是多行注释文字这是多行注释文字......
  • Java 中 ArrayList 和 LinkedList 有什么区别
    在Java中,ArrayList和LinkedList是两种常见的集合类。它们都实现了List接口,提供了类似数组的功能,可以存储任意类型的对象。虽然它们都可以实现相同的功能,但是它们的底层实现方式有所不同,因此在性能和用途上也存在一些差异。ArrayListArrayList是一个基于数组实现的动态数组,它可......