如何在Java中对ArrayList进行排序[重复]

Posted

技术标签:

【中文标题】如何在Java中对ArrayList进行排序[重复]【英文标题】:How to sort an ArrayList in Java [duplicate] 【发布时间】:2013-08-28 19:23:42 【问题描述】:

我有一个名为 Fruit 的课程。我正在创建此类的列表并在列表中添加每个水果。我想根据水果名称的顺序对这个列表进行排序。

public class Fruit

    private String fruitName;
    private String fruitDesc;
    private int quantity;

    public String getFruitName() 
        return fruitName;
    
    public void setFruitName(String fruitName) 
        this.fruitName = fruitName;
    
    public String getFruitDesc() 
        return fruitDesc;
    
    public void setFruitDesc(String fruitDesc) 
        this.fruitDesc = fruitDesc;
    
    public int getQuantity() 
        return quantity;
    
    public void setQuantity(int quantity) 
        this.quantity = quantity;
    

我正在使用 for 循环创建它的列表

List<Fruit>  fruits= new ArrayList<Fruit>();

Fruit fruit;
for(int i=0;i<100;i++)

   fruit = new fruit();
   fruit.setname(...);
   fruits.add(fruit);

我需要使用列表中每个对象的水果名称对这个数组列表进行排序

怎么样??

【问题讨论】:

试试这个:dzone.com/articles/sorting-java-arraylist 【参考方案1】:

为 Fruit 实现 Comparable 接口。

public class Fruit implements Comparable<Fruit> 

实现方法

@Override
    public int compareTo(Fruit fruit) 
        //write code here for compare name
    

然后调用排序方法

Collections.sort(fruitList);

【讨论】:

Collections.sort(..) 也适用于ArrayList&lt;T&gt;,其中TIntegerLongString,它们都实现了compareTo(..) 方法。 Comparable 应该是 Comparable 以与 compareTo(Fruit fruit) 一起使用 如果我想添加多个不同的排序选项,您的方法会是什么样子,例如覆盖 compareTo 方法以按对象名称排序,但添加另一个以按年龄、产品 ID 等排序。等 @b101:在这种情况下,您将编写多个比较器,然后在正确的位置插入正确的比较器。比如:Comparator comp1 = new Comparator&lt;Fruit&gt;() @\Override public int compare(Fruit fruit2, Fruit fruit1) return fruit1.fruitName.compareTo(fruit2.fruitName); ); Collection.sort(fruitList, comp1);【参考方案2】:

从 Apache Commons 尝试 BeanComparator。

import org.apache.commons.beanutils.BeanComparator;


BeanComparator fieldComparator = new BeanComparator("fruitName");
Collections.sort(fruits, fieldComparator);

【讨论】:

【参考方案3】:

像这样使用Comparator

List<Fruit> fruits= new ArrayList<Fruit>();

Fruit fruit;
for(int i = 0; i < 100; i++)

  fruit = new Fruit();
  fruit.setname(...);
  fruits.add(fruit);


// Sorting
Collections.sort(fruits, new Comparator<Fruit>() 
        @Override
        public int compare(Fruit fruit2, Fruit fruit1)
        

            return  fruit1.fruitName.compareTo(fruit2.fruitName);
        
    );

现在你的水果列表是根据fruitName排序的。

【讨论】:

无论是这种方法,使用Comparator,还是@BMT 的使对象实现Comparable 的方法都可以工作。不同之处在于,通过实现Comparable,您是在说排序是对象(如整数或字符串)本质的基本部分,而通过使用Comparator,您是在说在这个特定的上下文,您希望它们以某种方式排序。 排序的顺序呢??升序还是降序?? 如果水果名称区分大小写,那么您应该使用 compareToIgnoreCase 我认为在“since java-8”部分给出的答案更简洁:***.com/a/2784576/1372202 @Silent_Rebel 它在上升。如果要降序排列,则需要在排序后反转列表。这很乏味,同意。

以上是关于如何在Java中对ArrayList进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中对ArrayList<List>进行排序[重复]

在 java 中对 ArrayList<Integer> 的数组进行排序

如何使用类在Java中对PriorityQueue进行排序[重复]

如何根据GPA对数组列表进行升序排序? arraylist 包含一个对象数组。 (Java)[重复]

如何按降序对 ArrayList<Long> 进行排序?

Java中如何对集合排序