如何在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<T>
,其中T
是Integer
、Long
、String
,它们都实现了compareTo(..)
方法。
Comparable 应该是 ComparableComparator comp1 = new Comparator<Fruit>() @\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进行排序[重复]