zoukankan      html  css  js  c++  java
  • List排序

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

    /**
    * 根据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());
            }
        }
    }
    

    输出结果如下
    a
    b

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

    /**
    * 根据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());
            }
        }
    }
    

    输出结果如下
    a
    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;
                }
            });
    
  • 相关阅读:
    (转)游戏设备的三大未来趋势
    (转)零基础学习 Hadoop 该如何下手?
    (转)如何系统地学习数据挖掘?
    (转)大数据最核心的价值是什么?
    (转)面向对象编程的弊端是什么?
    (转)处理器架构、指令集和汇编语言,三者有何关系?
    (转)游戏界人士如何看待《征途》这款游戏?
    (转)想从事游戏开发,1 年内能精通 C++ 吗,还需要学习什么?
    (转)数据库老兵:NewSQL才是未来
    (转)神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?
  • 原文地址:https://www.cnblogs.com/mingf123/p/3845012.html
Copyright © 2011-2022 走看看