zoukankan      html  css  js  c++  java
  • ArryList 排序总结

    java中最常用的arrylist的排序,总结如下:

    主要有两种方式,但是核心思想都是重写Comparator的compare方法。

    此处根据arrylist存储对象的不同可以分为两种情况。

    1、简单场景

    arrylist存储的是乱序的整数,此时,可直接用Collections.sort方法,不过如果是字符串,那么就需要重写下compare方法了。详见下面代码

    package muke.simple_lx;
    
    import com.alibaba.fastjson.JSONObject;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class ListSort {
        public static void main(String[] args) {
            ArrayList ls = new ArrayList<>();
            List<String> ls2 = new ArrayList<>();
            ls2.add("11");
            ls2.add("22");
            ls2.add("9");
            ls2.add("50");
    
            ls.add(11);
            ls.add(22);
            ls.add(55);
            ls.add(4);
            ls.add(9);
            //当数组元素为字符串时,排序时若不转为整形,则排序结果不准确。
            Collections.sort(ls2,new SortString());
            Collections.sort(ls);
            System.out.println(JSONObject.toJSONString(ls2));
            System.out.println(JSONObject.toJSONString(ls));
        }
    }
    class SortString implements Comparator<String>{
    
        @Override
        public int compare(String o1, String o2) {
            if (Integer.parseInt(o1)>Integer.parseInt(o2)){
                //从大到小
                return -1;
            }else {
                return 1;
            }
    
        }
    }

    2、根据对象的指定字段排序,此处有两种写法,一种是直接用arrlist的sort方法,通过匿名内部类的方式重写compare方法,另一种是实现接口的方式重写。详见下面代码:

     1 package muke.simple_lx;
     2 
     3 import com.alibaba.fastjson.JSONObject;
     4 
     5 import java.util.ArrayList;
     6 import java.util.Collections;
     7 import java.util.Comparator;
     8 import java.util.List;
     9 
    10 public class ListSort1 {
    11     private String id;
    12     private String name;
    13     private String age;
    14     public ListSort1(String id,String name,String age){
    15         this.id=id;
    16         this.name=name;
    17         this.age=age;
    18     }
    19 
    20     public String getId() {
    21         return id;
    22     }
    23 
    24     public void setId(String id) {
    25         this.id = id;
    26     }
    27 
    28     public String getName() {
    29         return name;
    30     }
    31 
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35 
    36     public String getAge() {
    37         return age;
    38     }
    39 
    40     public void setAge(String age) {
    41         this.age = age;
    42     }
    43 
    44 
    45 
    46     public static void main(String[] args) {
    47         ListSort1 listSort1 = new ListSort1("1","a","11");
    48         ListSort1 listSort2 = new ListSort1("2","b","9");
    49         ListSort1 listSort3 = new ListSort1("3","c","22");
    50         List ls = new ArrayList();
    51         ls.add(listSort1);
    52         ls.add(listSort2);
    53         ls.add(listSort3);
    54         //第一种排序的写法
    55 //        ls.sort(new Comparator() {
    56 //            @Override
    57 //            public int compare(Object o1, Object o2) {
    58 //                ListSort1 a1 = (ListSort1)o1;
    59 //                ListSort1 a2 = (ListSort1)o2;
    60 //                //此方法适用age为整形时,若不为整形,则排序结果不准确。
    61 //                //int a = a1.getAge().compareTo(a2.getAge());
    62 //                //通用方法
    63 //                if (Integer.parseInt(a1.getAge())>Integer.parseInt(a2.getAge())){
    64 //                    //从大到小
    65 //                    return -1;
    66 //                }else {
    67 //                    return 1;
    68 //                }
    69 //
    70 //            }
    71 //    });
    72         //第二种写法
    73         Collections.sort(ls,new SortByAge());
    74 //        () -> Collections.sort(ls, new SortByAge());
    75         System.out.println(JSONObject.toJSONString(ls));
    76         }
    77 
    78 }
    79 class SortByAge implements Comparator<ListSort1> {
    80 
    81 
    82     @Override
    83     public int compare(ListSort1 a1, ListSort1 a2) {
    84         if (Integer.parseInt(a1.getAge())>Integer.parseInt(a2.getAge())){
    85             //从大到小
    86             return -1;
    87         }else {
    88             return 1;
    89         }
    90     }
    91 }
    View Code
  • 相关阅读:
    poj 1201 Intervals 差分约束系统
    poj 3237 Tree 树链剖分+线段树
    hdu 2256 Problem of Precision 构造整数 + 矩阵快速幂
    hdu 5451 Best Solver 矩阵循环群+矩阵快速幂
    hdu 5769 Substring 后缀数组 + KMP
    hdu 5755 2016 Multi-University Training Contest 3 Gambler Bo 高斯消元模3同余方程
    hdu 5690 2016"百度之星"
    hdu 5738 2016 Multi-University Training Contest 2 Eureka 计数问题(组合数学+STL)
    hdu 5719 BestCoder 2nd Anniversary B Arrange 简单计数问题
    hdu 5720 BestCoder 2nd Anniversary Wool 推理+一维区间的并
  • 原文地址:https://www.cnblogs.com/zhoufankui/p/12203368.html
Copyright © 2011-2022 走看看