排序数组列表的 Java 程序
原文:https://www . geesforgeks . org/Java-program-to-sort-an-ArrayList/
数组列表是集合框架中提供的类。在 Java 中,集合框架是在 java.util 包中定义的。数组列表用于动态存储元素。它比数组更灵活,因为数组列表中没有大小限制。数组列表以无序的方式存储数据。在某些情况下,我们需要以有序的方式重新排列数据。
java 中有两种数组列表。一个是包装器类对象的数组列表,另一个是用户定义对象的数组列表。我们将看到这两种数组列表的排序。让我们从第一个开始。
- 对包装类对象的数组列表进行排序。
- 升序
- 降序
- 对用户定义对象的数组列表进行排序。
- 可比较的
- 比较仪
类型 1:对包装类对象的数组列表进行排序
包装器类对象的数组列表只不过是字符串、整数等对象的数组列表。数组列表可以按升序和降序两种方式排序。集合类提供了两种排序数组列表的方法。sort()和 reverseOrder()分别用于升序和降序。
1(A)升序
这个 sort()方法接受列表对象作为参数,它将返回一个按升序排序的数组列表。sort()方法的语法如下。
Collections.sort(objectOfArrayList);
数组列表中的所有元素必须相互可比较,否则会抛出 ClassCastException 。这里,相互可比较意味着列表中的所有项目具有相同的数据类型。
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(132);
list.add(321);
list.add("India");
在上面的例子中,我们看到一个列表有三个元素,其中两个元素是整数类型,一个是字符串类型。整数中的两个元素是相互可比较的,但是字符串类型的元素与其他两个元素不可比较。在这种情况下,我们可以得到一个 ClassCastException。因此,列表必须具有相同类型的元素。
让我们考虑下面的例子来理解排序。
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to Sort an ArrayList
// import java.util package
import java.util.*;
class GFG {
// Main driver method
public static void main(String[] args)
{
// Define an objects of ArrayList class
ArrayList<String> list = new ArrayList<String>();
// Adding elements to the ArrayList
list.add("India");
list.add("Pakistan");
list.add("Srilanka");
list.add("USA");
list.add("Australia");
list.add("Japan");
// Printing the unsorted ArrayList
System.out.println("Before Sorting : " + list);
// Sorting ArrayList in ascending Order
Collections.sort(list);
// printing the sorted ArrayList
System.out.println("After Sorting : " + list);
}
}
输出:
Before Sorting : [India, Pakistan, Srilanka, USA, Australia, Japan]
After Sorting : [Australia, India, Japan, Pakistan, Srilanka, USA]
1(B)降序
为了按降序对数组列表进行排序,我们使用【reverse order()】方法作为 sort()方法的参数。我们不能直接调用 reverseOrder()方法。这个方法有两个参数,一个是数组列表的对象,第二个参数是 Collections.reversOrder()方法。此方法将按降序返回数组列表。类似于 sort()方法,ArrayList 必须是相互可比较的,否则会抛出 ClassCastException 。
Collections.sort(objectOfArrayList, Collections.reverseOrder());
这里,这个方法首先按升序对项目进行排序,然后它将颠倒排序项目的顺序。
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to Sort an ArrayList
// Importing generic java files
import java.util.*;
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Define an objects of ArrayList class
ArrayList<Integer> list = new ArrayList<Integer>();
// Adding elements to the ArrayList
list.add(410);
list.add(250);
list.add(144);
list.add(967);
list.add(289);
list.add(315);
// Printing the unsorted ArrayList
System.out.println("Before Sorting : " + list);
// Sorting ArrayList in descending Order
Collections.sort(list, Collections.reverseOrder());
// Printing the sorted ArrayList
System.out.println("After Sorting : " + list);
}
}
输出:
Before Sorting : [410, 250, 144, 967, 289, 315]
After Sorting : [967, 410, 315, 289, 250, 144]
2。对用户定义对象的数组列表进行排序
用户定义对象的数组列表只不过是自定义对象的数组列表。在 Java 中,有两个接口可以用来对集合元素进行排序。可比和比较。
2(A)可比
Comparable 提供单一的排序顺序。如果我们使用 Comparable,它将影响原始类。可比接口提供 【比较】() 方法对元素进行排序。在 java 中,comparable 是由 java.lang 包提供的。我们可以通过调用 Collections.sort(List)方法 对数组列表进行排序。
示例:根据库存汽车数量进行排序。
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to Sort an ArrayList
// Importing generic java files
import java.util.*;
// Implements comparable interface into custom class
class Car implements Comparable<Car> {
int ModalNo;
String name;
int stock;
// Parameterized constructor of the class
Car(int ModalNo, String name, int stock)
{
this.ModalNo = ModalNo;
this.name = name;
this.stock = stock;
}
// Override the compareTo method
public int compareTo(Car car)
{
if (stock == car.stock)
return 0;
else if (stock > car.stock)
return 1;
else
return -1;
}
}
// Main driver method
class GFG {
// Main driver method
public static void main(String[] args)
{
// Create the ArrayList object
ArrayList<Car> c = new ArrayList<Car>();
c.add(new Car(2018, "Kia", 20));
c.add(new Car(2020, "MG", 13));
c.add(new Car(2013, "creta", 10));
c.add(new Car(2015, "BMW", 50));
c.add(new Car(2017, "Audi", 45));
// Call the sort function
Collections.sort(c);
// Iterate over ArrayList using for each loop
for (Car car : c) {
// Print the sorted ArrayList
System.out.println(car.ModalNo + " " + car.name
+ " " + car.stock);
}
}
}
输出:
2013 creta 10
2020 MG 13
2018 Kia 20
2017 Audi 45
2015 BMW 50
2(B)比较器
比较器提供多种排序顺序。比较器不会影响原始类。比较器提供 compare() 方法对元素进行排序。在 java 中,comparable 由 java.util 包提供。我们可以通过调用 Collections.sort(List,Comparator)方法对数组列表进行排序。举个例子。
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to Sort an ArrayList
// Step 1: ImportingDB files
import java.util.*;
// Class 1: Parent Class
class Car {
int ModalNo;
String name;
int stock;
// Parameterized constructor
Car(int ModalNo, String name, int stock)
{
this.ModalNo = ModalNo;
this.name = name;
this.stock = stock;
}
}
// Class 2: Child class
// creates the comparator for comparing stock value
class StockComparator implements Comparator<Car> {
// Function to compare
public int compare(Car c1, Car c2)
{
if (c1.stock == c2.stock)
return 0;
else if (c1.stock > c2.stock)
return 1;
else
return -1;
}
}
class GFG {
// Main driver method
public static void main(String[] args)
{
// Create the ArrayList object
ArrayList<Car> c = new ArrayList<Car>();
c.add(new Car(2018, "Kia", 20));
c.add(new Car(2020, "MG", 13));
c.add(new Car(2013, "creta", 10));
c.add(new Car(2015, "BMW", 50));
c.add(new Car(2017, "Audi", 45));
// Call the sort function
Collections.sort(c, new StockComparator());
// For each loop to iterate
for (Car car : c) {
// Print the sorted ArrayList
System.out.println(car.stock + " " + car.name
+ " " + car.ModalNo);
}
}
}
输出:
10 creta 2013
13 MG 2020
20 Kia 2018
45 Audi 2017
50 BMW 2015
版权属于:月萌API www.moonapi.com,转载请注明出处