当前位置: 主页 > JAVA语言

java 按字母顺序排序-按字母排序

发布时间:2023-02-10 09:35   浏览次数:次   作者:佚名

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

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

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

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

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

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

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

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

在我们的 Java ArrayList 自定义订单排序示例中java 按字母顺序排序,我们创建了一个 PriceComparator,它根据对象的价格对对象进行排序。 这样我们就可以得到存储在 ArrayList 中的最便宜或最昂贵的智能手机。

顺便说一下,通过在 Comparable 和 Comparator 类上添加 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 一样直接访问。

如果我们将此比较器传递给包含字符串的 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 中运行 Sort ArrayList 示例代码时遇到任何问题,请告诉我,我很乐意提供帮助。