如何对Java ArrayList进行排序

时间:2020-01-09 10:35:01  来源:igfitidea点击:

Java中的ArrayList是有序集合,从某种意义上说,它保持元素的插入顺序,但是有时我们可能需要对ArrayList进行升序或者降序排序。在这篇文章中,我们将看到如何用Java对ArrayList进行排序。

用于对Java ArrayList进行排序的方法

Java中的Collections类提供了许多对集合进行操作的实用程序方法,该类还具有sort方法。实际上sort()方法在Collections类中已重载,并且有2个变体。

  • void sort(List list)–根据其元素的自然顺序将指定列表按升序排序。

  • sort(List list,Comparator <?super T> c)–根据指定Comparator的顺序对指定列表进行排序。

排序Java ArrayList示例

如果要按升序对ArrayList进行排序,则只需在Collections.sort()方法中传递List。 Java中的所有包装器类(Integer,Long等),String,Date实现Comparable接口,并提供compareTo()方法的实现,该方法确定其自然顺序。因此,如果我们具有String,Integer,Long,Float的ArrayList,则将使用sort()方法以升序对Date进行排序。

字符串的ArrayList排序示例代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortingList {
  public static void main(String[] args) {
    List<String> carList = new ArrayList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("Mini Cooper");
    carList.add("BMW");
    System.out.println("List elements- " + carList);
    // Sorting list
    Collections.sort(carList);
    System.out.println("List elements after sorting- " + carList);
  }
}

输出:

List elements- [Audi, Jaguar, Mini Cooper, BMW]
List elements after sorting- [Audi, BMW, Jaguar, Mini Cooper]

按降序对Java ArrayList进行排序

如果要以自然顺序的相反顺序对ArrayList进行排序,则Collections类具有可以使用的reverseOrder()方法。另外,我们可以编写自己的比较器。

reverseOrder()–返回一个Comparator,它对实现Comparable接口的对象集合强加自然顺序的逆序。

使用reverseOrder方法对Arraylist进行排序

由于reverseOrder()方法返回Comparator,因此我们必须使用Collections.sort()方法,在其中可以将Comparator用作参数。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortingList {
  public static void main(String[] args) {
    List<String> carList = new ArrayList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("Mini Cooper");
    carList.add("BMW");
    System.out.println("List elements- " + carList);
    // Sorting list in reverse order
    Collections.sort(carList, Collections.reverseOrder());
    System.out.println("List elements after sorting- " + carList);
  }
}

输出:

List elements- [Audi, Jaguar, Mini Cooper, BMW]
List elements after sorting- [Mini Cooper, Jaguar, BMW, Audi]

通过提供自己的自定义比较器对Arraylist进行排序

Collections.reverseOrder()方法返回Comparator类的实现。我们可以以相同的方式编写自己的比较器来执行要使用的排序,并使用该比较器对列表进行排序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortingList {
  public static void main(String[] args) {
    List<String> carList = new ArrayList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("Mini Cooper");
    carList.add("BMW");
    System.out.println("List elements- " + carList);
    // Sorting list in reverse order
    Collections.sort(carList, new MyComparator());
    System.out.println("List elements after sorting- " + carList);
  }
}

//Comparator class
class MyComparator implements Comparator<String>{
  @Override
  public int compare(String o1, String o2) {
    return o2.compareTo(o1);
  }    
}

输出:

List elements- [Audi, Jaguar, Mini Cooper, BMW]
List elements after sorting- [Mini Cooper, Jaguar, BMW, Audi]