如何在Java中对ArrayList进行排序
在Java中,
集合是一个提供接口(
Set, List, Queue等)和类(
ArrayList,LinkedList等等)来存储对象组。这些类以无序方式存储数据。有时我们需要以一种称为
排序的有序方式来排列数据。可以按
升序或
降序的顺序以两种方式执行排序。
在本节中,我们将学习
如何对ArrayList进行排序和
降序。
ArrayList
在 Java ,
ArrayList 是在
java.util 包中定义的Collections框架类。它继承了AbstractList类。它动态存储元素。 ArrayList的优点是它没有大小限制。它比传统阵列更灵活。它可能具有重复的元素。我们还可以使用List接口的所有方法,因为它实现了
List 接口。
我们可以使用升序和降序两种方式对ArrayList进行排序。 Collections类提供了两种方法来对Java中的 ArrayList 进行排序。
sort()
reverseOrder()
Collections.sort()方法
可以使用sort()方法对ArrayList进行排序。它接受ArrayList的对象作为要排序的参数,并根据其元素的自然顺序返回以升序排序的ArrayList。
语法
public static <T extends Comparable<? super T>>
void sort(List<T> list)
记住: ArrayList中的所有元素必须相互可比较,否则会引发
ClassCastException。。此处,相互可比意味着该列表必须具有相同类型的元素。例如,请考虑以下代码段:
//creating an instance of ArrayList that contains String type elements
ArrayList<String> list = new ArrayList<String>();
list.add("Computer");
list.add(123);
list.add("Hard Disk");
list.add("DRAM");
在上面的示例中,我们看到一个列表包含四个元素,其中三个元素为String类型,一个为Integer类型。 String中的三个元素可以相互比较,但是Integer类型的元素不能与其他三个元素进行比较。因此,列表必须具有相同类型的元素。
Collections.reverseOrder()方法
如果我们要以
降序对ArrayList进行排序 reverseOrder()方法。它使我们可以按
反字典顺序的顺序对ArrayList进行排序。
语法
public static <T> Comparator<T>reverseOrder()
它返回一个比较器,该比较器对实现Comparable接口的对象集合施加自然排序的逆序。
请记住,我们没有直接调用reverseOrder()方法。我们将其与
Collection.sort() 方法一起使用,如下所示
Collections.sort(objectOfArrayList, Collections.reverseOrder());
因此,对ArrayList进行降序排序分为两个步骤,首先是ArrayList对数据进行升序排序,然后使用
reverseOrder()方法对排序后的数据进行反转。
让我们创建按升序对ArrayList排序的程序。
按升序对ArrayList排序
在下面的示例中,我们创建了一个ArrayList类型为String,并向其中添加了一些元素。之后,我们调用了Collections类的sort()方法,并传递了ArrayList类的对象,即以升序对元素进行排序的列表。
SortArrayListExample1.java
import java.util.*;
public class SortArrayListExample1 {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
list.add("Volkswagen");
list.add("Toyota");
list.add("Porsche");
list.add("Ferrari");
list.add("Mercedes-Benz");
list.add("Audi");
list.add("Rolls-Royce");
list.add("BMW");
System.out.println("Before Sorting: "+ list);
Collections.sort(list);
System.out.println("After Sorting: "+ list);
}
}
输出:
Before Sorting: [Volkswagen, Toyota, Porsche, Ferrari, Mercedes-Benz, Audi, Rolls-Royce, BMW]
After Sorting: [Audi, BMW, Ferrari, Mercedes-Benz, Porsche, Rolls-Royce, Toyota, Volkswagen]
让我们看另一个对整数类型的ArrayList进行排序的示例。
SortArrayListExample2.java
import java.util.*;
public class SortArrayListExample2 {
public static void main(String args[]) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(55);
list.add(34);
list.add(98);
list.add(67);
list.add(39);
list.add(76);
list.add(81);
System.out.println("ArrayList Before Sorting:");
for(int marks: list){
System.out.println(marks);
}
Collections.sort(list);
System.out.println("ArrayList After Sorting:");
for(int marks: list){
System.out.println(marks);
}
}
}
输出:
ArrayList Before Sorting:
55
34
98
67
39
76
81
ArrayList After Sorting:
34
39
55
67
76
81
98
按降序排列ArrayList
在下面的示例中,我们创建了一个String类型的ArrayList并向其中添加了一些元素。之后,我们调用了Collections类的reverseOrder()方法以及sort()方法,并传递了ArrayList类的对象,即以降序对元素进行排序的列表。
SortArrayListExample3.java
import java.util.*;
public class SortArrayListExample3{
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
list.add("Data Science");
list.add("Testing");
list.add("C#");
list.add("Basic Language");
list.add("UML");
list.add("Algorithms ");
list.add("Computer Networks");
list.add("Python");
System.out.println("Before Sorting: "+ list);
Collection.sort() method
Collections.sort(list, Collections.reverseOrder());
System.out.println("After Sorting: "+ list);
}
}
输出:
Before Sorting: [Data Science, Testing, C#, Basic Language, UML, Algorithms, Computer Networks, Python]
After Sorting: [UML, Testing, Python, Data Science, Computer Networks, C#, Basic Language, Algorithms]
SortArrayListExample4.java
import java.util.*;
public class SortArrayListExample4 {
public static void main(String args[]){
ArrayList<Integer>list = new ArrayList<Integer>();
list.add(566);
list.add(230);
list.add(123);
list.add(110);
list.add(689);
list.add(12);
list.add(95);
System.out.println("ArrayList Before Sorting:");
for(int marks: list){
System.out.println(marks);
}
Collections.sort(list, Collections.reverseOrder());
System.out.println("ArrayList After Sorting:");
for(int marks: list){
System.out.println(marks);
}
}
}
输出:
ArrayList Before Sorting:
566
230
123
110
689
12
95
ArrayList After Sorting:
689
566
230
123
110
95
12