迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

如何在 Java 中以自然顺序和自定义顺序对 ArrayList 进行排序

作者:迹忆客 最近更新:2023/01/30 浏览次数:

在 Java 中对 ArrayList 进行排序是 Java 开发人员的一项常见任务,在我上一篇文章 Java 中 ArrayList 的 10 个示例中讨论时以及在讨论 Java 中的 comparator 和 comparable 时,我们已经触及了它。 为了对 ArrayList 进行排序,我们需要使用 Collections 实用程序类,它包含一个重载的 sort() 方法,用于对不同的集合进行排序,并支持 Java 中的不同比较器。 在本文中,我们将看到如何按元素的自然顺序对 ArrayList 进行排序,然后使用比较器在 Java 中对 ArrayList 进行排序。

java.util.Collections 类提供了一个反向比较器,可用于按降序对数组进行排序。 我们可以通过调用 Collections.reverseOrder() 方法来获取此 Comparator


使用自然顺序在 Java 中对 ArrayList 进行排序

为了按照元素的自然顺序对 Java ArrayList 进行排序,存储在 ArrayList 中的对象必须在 Java 中实现一个 Comparable 接口,并且应该根据它们的自然顺序覆盖 compareTo() 方法。

在我们的 ArrayList 中自然顺序排序的例子中,我们实现了智能手机的 compareTo 并根据品牌对它们进行排序。

一旦我们的对象确定,只需将它们存储在 Java ArrayList 中并将该列表传递给 Collections.sort() 方法,该方法将按照对象的自然顺序对列表进行排序。


使用自定义顺序对 Java ArrayList 进行排序

要按自定义顺序对 Java 中的 ArrayList 进行排序,我们需要将外部比较器与 ArrayList 一起提供给 Collections.sort(List, Comparator) 方法。 compare() 方法将定义对象的排序将如何在 ArrayList 中进行。

在我们的 Java ArrayList 自定义顺序排序示例中,我们创建了一个 PriceComparator,它根据对象的价格对对象进行排序。 因此,我们可以获得存储在 ArrayList 中的最便宜或最昂贵的智能手机。

顺便说一句,通过在 ComparableComparator 类上添加 lambda 表达式、方法引用和各种实用方法(如 comparing()thenComparing() 方法),在 Java 中对 ArrayList 进行排序变得更加容易。

现在,让我们看下面的 Java 中自定义顺序的 ArrayList 排序的完整代码示例:

使用比较器按自定义顺序对 ArrayList 进行排序的 Java 程序

这是一个完整的代码示例,它使用自定义比较器按自然顺序和自定义顺序对 java 中的 ArrayList 进行排序。

package test;

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

public class ArrayListSortingExample {

   private static class SmartPhone implements Comparable {
        private String brand;
        private String model;
        private int price;

        public SmartPhone(String brand, String model, int price){
            this.brand = brand;
            this.model = model;
            this.price = price;
        }
      
        @Override
        public int compareTo(SmartPhone sp) {
            return this.brand.compareTo(sp.brand);
        }

        @Override
        public String toString() {
            return "SmartPhone{" + "brand=" + brand + ", model=" + model + ", price=" + price + '}';
        }
      
    }
  
    private static class PriceComparator implements Comparator{

        @Override
        public int compare(SmartPhone sp1, SmartPhone sp2) {
            return (sp1.price < sp2.price ) ? -1: (sp1.price > sp2.price) ? 1:0 ;
        }
      
    }

    public static void main(String... args) {
      
        //为 arraylist 排序示例创建对象
        SmartPhone apple = new SmartPhone("Apple", "IPhone4S",1000);
        SmartPhone nokia = new SmartPhone("Nokia", "Lumia 800",600);
        SmartPhone samsung = new SmartPhone("Samsung", "Galaxy Ace",800);
        SmartPhone lg = new SmartPhone("LG", "Optimus",500);
      
        //创建用于排序示例的 Arraylist
        ArrayList smartPhones = new ArrayList();
      
        //将对象存储到 ArrayList 中进行排序
        smartPhones.add(apple);
        smartPhones.add(nokia);
        smartPhones.add(samsung);
        smartPhones.add(lg);
      
        //根据对象的自然顺序在 Java 中对 Arraylist 进行排序
        Collections.sort(smartPhones);
      
        //按自然顺序打印排序的数组列表
        System.out.println(smartPhones);
      
        //按 Comparator 定义的自定义顺序在 Java 中对 Arraylist 进行排序
        Collections.sort(smartPhones,new PriceComparator());
      
        //按自定义顺序打印排序的数组列表
        System.out.println(smartPhones);
    
    }
}

上述代码运行结果如下

[SmartPhone{brand=Apple, model=IPhone4S, price=1000},
SmartPhone{brand=LG, model=Optimus, price=500}, 
SmartPhone{brand=Nokia, model=Lumia 800, price=600},
SmartPhone{brand=Samsung, model=Galaxy Ace, price=800}]

[SmartPhone{brand=LG, model=Optimus, price=500},
SmartPhone{brand=Nokia, model=Lumia 800, price=600},
SmartPhone{brand=Samsung, model=Galaxy Ace, price=800},
SmartPhone{brand=Apple, model=IPhone4S, price=1000}]

如何在 Java 中按降序对字符串的 ArrayList 进行排序?

ArrayList 也可以使用降序或倒序排序

Collections.reverseOrder()

Collection.reverseOrder(Comparator cmp)

前一个方法将按自然顺序的倒序排序,而后一个方法将按指定比较器的倒序排序,如以下将 ArrayList 排序为倒序的示例所示:

//在 Java 中按降序或倒序对 ArrayList 进行排序
List<String> unsortedList = Arrays.asList("abc", "bcd", "ade", "cde"); 
Collections.sort(unsortedList, Collections.reverseOrder());
System.out.println("Arraylist in descending order: " + unsortedList);

顺便说一句,如果我们正在对对象的 ArrayList 进行排序,那么我们还可以在多个字段上对它们进行排序,如该示例所示,我们已按作者和标题对 Book 对象的 ArrayList 进行排序。 这样同一作者的所有书籍都会排在第一位。


如何以不区分大小写的顺序对字符串的 ArrayList 进行排序

字符串的 ArrayList 也可以通过不区分大小写的比较来排序。 String 类定义了一个方便的不区分大小写的比较器,可以像 String.CASE_INSENSITIVE_ORDER 一样直接访问。

如果我们将此 Comparator 传递给包含 String 的 ArrayList.sort() ,那么它们将被相应地排序。

//按不区分大小写的字符串顺序对 ArrayList 进行排序
unsortedList=Arrays.asList("abc","bcd","ABC","BCD");
System.out.println("ArrayList before case insensitive sort: "+unsortedList);

Collections.sort(unsortedList,String.CASE_INSENSITIVE_ORDER);
System.out.println("ArrayList after case insensitive sort: "+unsortedList);

这就是关于如何使用 Custom Comparator 根据 Object 的自然顺序和任何自定义顺序对 Java 中的 ArrayList 进行排序的全部内容。 在 Java 中比较和排序对象时,这是一种有用的技术。 比较器为我们提供了强大的功能和对排序的细粒度控制。

Java 8 对 Comparator API 的增强使它更加流行,通过使用这些功能,我们可以轻松创建更具可读性和可重用性的 Comparator

如果大家在 Java 中运行排序 ArrayList 示例代码时遇到任何问题,请告诉我们,我很乐意为大家提供帮助。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Java 中获取文件大小

发布时间:2023/05/01 浏览次数:139 分类:Java

Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。

Java 中的文件分隔符

发布时间:2023/05/01 浏览次数:108 分类:Java

本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。

Java 中的文件过滤器

发布时间:2023/05/01 浏览次数:193 分类:Java

本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。

Java 获取 ISO 8601 格式的当前时间戳

发布时间:2023/05/01 浏览次数:132 分类:Java

本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。

在 Java 中获取数组的子集

发布时间:2023/05/01 浏览次数:142 分类:Java

本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集

用 Java 填充二维数组

发布时间:2023/05/01 浏览次数:110 分类:Java

二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。

Java 中的自然排序

发布时间:2023/05/01 浏览次数:132 分类:Java

Java 中最常用的顺序是自然顺序。 本文将展示如何使用 naturalOrder() 函数对数组进行排序。

计算 Java 数组中的重复元素

发布时间:2023/05/01 浏览次数:202 分类:Java

本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。

Java 中 List 和 Arraylist 的区别

发布时间:2023/05/01 浏览次数:90 分类:Java

表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便