Java リストを並べ替えるいくつかの方法

目次

I.はじめに

2、テキスト

1. オプション 1

2. スキーム 2

3. スキーム 3

4. 解決策 4

3. まとめ

4.終了


I.はじめに

リストをソートする必要がある場合がありますが、Java でそれを行うにはどうすればよいでしょうか? この記事では、Java での List のソート方法をいくつか記録しますので、お役に立てれば幸いです。

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

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 はブロガーによって推奨されている最も簡単なソリューションでもあり、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. まとめ

上記は、リストの並べ替えに一般的に使用されるいくつかのメソッドです。最初の 2 つのメソッドは Comparable インターフェイスを実装し、エンティティを通じて CompareTo メソッドを書き換えます。最初のメソッドがインターフェイスを実装せず、compareTo メソッドを実装しない理由は、 Interger クラスのソース コード。Java がすでに実装しているため、再度記述する必要はありません。

3 番目のメソッドは、匿名内部クラスを介して比較メソッドを実装して Comparator インターフェイスを実装し、カスタム コンパレータを介して並べ替えを実装します。

4.終了

この記事が役立つと思われる場合は、「いいね」を押してブックマークしておくと、次回必要になったときに見つからなくなる可能性があります。

おすすめ

転載: blog.csdn.net/Wjhsmart/article/details/115935693