Несколько способов сортировки списка Java

Java задняя часть

содержание

Введение

2. Текст

1. Вариант 1

2. Вариант 2

3. Вариант третий

4. Вариант 4

3. Резюме

В-четвертых, конец


Введение

Иногда нам нужно отсортировать список, как это реализовать в Java? В этой статье описаны несколько методов сортировки List в Java, и я надеюсь, что эта статья будет вам полезна.

2. Текст

1. Вариант 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

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

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]]

3. Резюме

Выше приведены несколько методов, которые часто используются для сортировки списка.Первые два метода реализуют интерфейс Comparable через сущности и переписывают метод compareTo.Причину, по которой первый метод не реализует интерфейс и реализует метод compareTo, можно увидеть, просмотрев исходный код класса Interger. , java уже реализовал его за нас, поэтому нет необходимости писать его заново

Третий метод реализует метод сравнения через анонимный внутренний класс, реализующий интерфейс Comparator, и реализует сортировку через пользовательский компаратор.

В-четвертых, конец

Если вы считаете, что эта статья полезна для вас, вы можете поставить лайк и добавить ее в закладки, возможно, вы не найдете ее в следующий раз, когда будете использовать.