首页 > 其他分享 >List集合的排序方式

List集合的排序方式

时间:2023-01-03 22:11:18浏览次数:37  
标签:name int res List day Employee 集合 排序 public

本文主要讲述Lsit集合的排序方式:

  1 /**
  2  * 集合的排序方式:2种方式
  3  */
  4 public class GenericWork {
  5     public static void main(String[] args) {
  6         ArrayList<Employee> employeeArrayList = new ArrayList<>();
  7         employeeArrayList.add(new Employee("tom",20000,2000,12,4));
  8         employeeArrayList.add(new Employee("jack",18000,2002,2,10));
  9         employeeArrayList.add(new Employee("white",8000,2001,8,5));
 10         employeeArrayList.add(new Employee("jack",18000,2002,1,5));
 11         employeeArrayList.add(null);
 12 
 13         // 排序方式1:
 14 //        Collections.sort(employeeArrayList, new Comparator<Employee>() {
 15 //            @Override
 16 //            public int compare(Employee o1, Employee o2) {
 17 //                int res = o1.getName().compareTo(o2.getName());
 18 //                if(res == 0){
 19 //                    res = o1.getBirthday().compareTo(o2.getBirthday());
 20 //                }
 21 //                return res;
 22 //            }
 23 //        });
 24 
 25         // 排序方式2:
 26         employeeArrayList.sort(new Comparator<Employee>() {
 27             @Override
 28             public int compare(Employee o1, Employee o2) {
 29                 if(o1 == null || o2 == null){
 30                     return 0;
 31                 }
 32                 int res = o1.getName().compareTo(o2.getName());
 33                 if(res == 0){
 34                     res = o1.getBirthday().compareTo(o2.getBirthday());
 35                 }
 36                 return res;
 37             }
 38         });
 39 
 40         // 遍历
 41         Iterator<Employee> iterator = employeeArrayList.iterator();
 42         while (iterator.hasNext()) {
 43             Employee employee = iterator.next();
 44             if(employee != null){
 45                 System.out.println(employee);
 46             }
 47         }
 48     }
 49 }
 50 // 注意这里实现Comparable接口泛型的使用
 51 class MyDate implements Comparable<MyDate>{
 52     private int year;
 53     private int mon;
 54     private int day;
 55 
 56     public MyDate(int year, int mon, int day) {
 57         this.year = year;
 58         this.mon = mon;
 59         this.day = day;
 60     }
 61 
 62     @Override
 63     public int compareTo(MyDate date) {
 64         int res = this.year - date.year;
 65         if(res == 0){
 66             res = this.mon - date.mon;
 67         }
 68         if(res == 0){
 69             res = this.day - date.day;
 70         }
 71         return res;
 72     }
 73 
 74     @Override
 75     public String toString() {
 76         return "year=" + year +
 77                 ", mon=" + mon +
 78                 ", day=" + day ;
 79     }
 80 }
 81 
 82 class Employee {
 83     private String name;
 84     private double sal;
 85     private MyDate birthday;
 86 
 87     public Employee(String name, double sal, int year,int mon,int day) {
 88         this.name = name;
 89         this.sal = sal;
 90         this.birthday = new MyDate(year,mon,day);
 91     }
 92 
 93     public String getName() {
 94         return name;
 95     }
 96 
 97     public void setName(String name) {
 98         this.name = name;
 99     }
100 
101     public MyDate getBirthday() {
102         return birthday;
103     }
104 
105     @Override
106     public String toString() {
107         return "Employee{" +
108                 "name='" + name + '\'' +
109                 ", sal=" + sal +
110                 ", birthday: " + birthday +
111                 '}';
112     }
113 }

总结:

方式1:Collections工具类的sort()方法,使用匿名内部类,实现Comparator接口,实现接口的compare()方法,并且要求比较的对象类实现Comparable接口,实现接口的compareTo()方法。

方式2:List类的sort()方法,使用匿名内部类,实现Comparator接口,实现接口的compare()方法,并且要求比较的对象类实现Comparable接口,实现接口的compareTo()方法。

注意:使用泛型的好处,使得List集合只能添加泛型指定的类的对象,否则编译报错。但是null仍然能够添加【list.add(null)】,因此需要在compare(Employee o1,Employee o2)中,判断传入的o1和o2是否为空,若为空,则不进行比较,直接返回0,否则有空指针异常【运行时异常】。

标签:name,int,res,List,day,Employee,集合,排序,public
From: https://www.cnblogs.com/zwgitOne123/p/17023503.html

相关文章

  • 【插入排序】详细讲解
    总体思路排序流程:一共十个数排序,先用第二个数55跟第一个数99比较,如果55小于99,那么交换55和99,此时前两个数(即55和99)已经有序了。接下来用第三个数11跟第二个数99比较,如......
  • 集合5 - Queue
    Queue-ArrayBlockingQueue底层实现--数组Array(数组)-Blocking(创建对象时的容量,多了就堵塞)-Queue(先进先出)publicclass_Queue{publicstaticvoidm......
  • flutter系列之:flutter中listview的高级用法
    目录简介ListView的常规用法创建不同类型的items总结简介一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通常情况下这样......
  • 集合4 HashSet
    HashSet底层实现是数组+链表数据存放时的索引通过内部Hash算法确定--增加数据是无序的Hash算法--索引相同时根据内容是否相同决定是否丢弃,内容不相同则采用链地址......
  • java集合Collection操作
    CollectionallCollections=newArrayList();//集合里添加数据allCollections.add("testName");//判断即合理是否包含某特定的数据if(al......
  • 比较ArrayList与LinkedList
    比较ArrayList与LinkedList底层实现ArrayList是数组-顺序表LinkedList是双向链表增加第一条数据时LinkedList的更快因为ArrayList默认初始化时创建容量为10的数组空......
  • 排序
    Ⅰ. 排序一. quicksort1. 手敲点击查看代码voidquicksort(intq[],intl,intr){//递归终止的情况if(l>=r)return;//子问题处理int......
  • react Redux 用Redux中央仓库实现一个todolist
     Redux简单介绍Redux是一个用来管理管理数据状态和UI状态的JavaScript应用工具。随着JavaScript单页应用(SPA)开发日趋复杂,JavaScript需要管理比任何时候都要多的state(状态),Re......
  • 排序算法
    选择排序选择排序(Selectionsort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续......
  • 03-ArrayList(CustomDynamicArray)
    数据结构是什么?..动态数组...Person.javapackagecom.rnny;/***@author软柠柠吖(Runny)*@date2023-01-03*/publicclassPerson{privateStrin......