Java List排序的几种方式整理

30,201 阅读3分钟

目录

一、前言

二、正文

1、方案一

2、方案二

3、方案三

4、方案四

三、总结

四、结尾


一、前言

在有的时候我们会需要对List进行排序,在Java中如何实现呢?本文记录一下Java中对List的几种排序方式,希望本文对你有所帮助。

二、正文

1、方案一

1.1、简单的排序方法,如以下代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
      List<Integer> list = new ArrayList<Integer>();
      list.add(new Integer(3));
      list.add(new Integer(14));
      list.add(new Integer(6));
      list.add(new Integer(10));
       // 简单的int类似数据,可以使用Collections的sort方法即可完成排序
      Collections.sort(list);
      System.out.println(list.toString());
  }
}

输出结果为:

[3,6,10,14]

这种简单的排序会直接按自然数据输出。

2、方案二

2.1、参数相对复杂的排序方式,参数为对象的情况

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
      List<User> list = new ArrayList<User>();
      list.add(new User("张三", 5));
      list.add(new User("李四", 30));
      list.add(new User("王五", 19));
      list.add(new User("王麻子", 17));
       // 按年龄排序
      Collections.sort(list); 
      System.out.println(list.toString());
  }
}


class User implements Comparable<User>{

  private String name; //姓名
  private int age; // 年龄

  public User(String name, int age) {
    this.name = name;
    this.age = age;
  }
  // getter && setter
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
  this.age = age;
  }
  @Override
  public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
  }

  @Override
  public int compareTo(User user) {           
      // 重写Comparable接口的compareTo方法,根据年龄升序排列,降序修改相减顺序即可
    return this.age - user.getAge();
  }
}

程序运行结果:按年龄升序排序

[User [name=张三, age=5], User [name=王麻子, age=17], User [name=王五, age=19], User [name=李四, age=30]]

3、方案三

3.1、使用匿名内部类实现排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
      List<User> list = new ArrayList<User>();
      list.add(new User("张三", 5));
      list.add(new User("李四", 30));
      list.add(new User("王五", 19));
      list.add(new User("王麻子", 17));
      Collections.sort(list, new Comparator<User>() {
        @Override
        public int compare(User u1, User u2) {
          int diff = u1.getAge() - u2.getAge();
          if (diff > 0) {
            return 1;
          }else if (diff < 0) {
            return -1;
          }
          return 0; //相等为0
        }
      }); // 按年龄排序
      System.out.println(list.toString());
  }
}

运行结果为:

[User [name=张三, age=5], User [name=王麻子, age=17], User [name=王五, age=19], User [name=李四, age=30]]

4、方案四

4.1、也是最简介的方案,博主推荐使用,一行代码即可搞定

import java.util.Collections;
import java.util.List;
public class sort {
    public static void main(String[] args) {
      List<User> list = new ArrayList<User>();
      list.add(new User("张三", 5));
      list.add(new User("李四", 30));
      list.add(new User("王五", 19));
      list.add(new User("王麻子", 17));
       // 这一行代码即可完成排序
      list.sort(Comparator.comparing(User::getAge));
      System.out.println(list.toString());
  }
}

输出结果为:

[User [name=张三, age=5], User [name=王麻子, age=17], User [name=王五, age=19], User [name=李四, age=30]]

三、总结

以上就是list排序经常用的几种方法,前两种方法都是通过实体实现Comparable接口并重写compareTo方法,第一种方式之所以没实现接口并实现compareTo方法,通过查看Interger类源码可以看到,java已经帮我们实现好了,所以不用再次写

第三种方法通过匿名内部类实现Comparator接口实现compare方法,通过自定义比较器来实现排序。

四、结尾

如果觉得本文对你有帮助,不妨点赞收藏起来把,说不定下次要用就找不到了呢。