使用Collections.sort(arrayListName)按其id排序ArrayList的对象

时间:2013-04-21 19:21:20

标签: java sorting arraylist comparator comparable

我有一个库存类,它创建一个包含对象Item的ArrayList,它也是一个类。我知道我必须打电话     Collections.sort(items);以便对ArrayList进行排序(顺便称之为它的项目)。赋值说我必须在Item类上使用接口,我不知道是否要实现Comparator或Comparable,然后为compareTo()方法或compare()方法编写什么尊敬。在我声明我的ArrayList之后,我立即进行了Collections.sort(items)调用,这没关系吗?

编辑:我的老师刚刚澄清她希望我们在Item类上实现Comparable<Item>

3 个答案:

答案 0 :(得分:2)

您必须实施Comparable,它才会有效Collections.sort

如果您需要新的比较器并且不想使用Comparable,则可以创建新的Comparator并将其用作:Collections.sort(list, new MyComparator())

  1. 您可以阅读Vogella撰写的an example(link here)。请仔细阅读。
  2. Another example显示了一个实现..检查Fruit

答案 1 :(得分:0)

Collections.sort()有两个版本。

Collections.sort(List)Collections.sort(List,Comparator)。一个需要List,另一个需要ListComparator的实例。单个参数sort()将期望您的类已实现Comparable并覆盖compareTo()方法。两个参数sort()方法需要Comparator的实例,其中您已实现Comparator并覆盖其compare()方法。

一个对象应该实现Comparable,如果这是对类进行排序的明确自然方式,那么任何人都需要对类进行排序通常会想要这样做。

但是,如果排序是类的一个不寻常的用例,或者可能有多个排序顺序,那么Comparator是更好的选择。

我在声明我的ArrayList之后立即调用了Collections.sort(items),这没关系吗?

当您需要对sort()进行排序时,您会致电List。在sort()之后添加项目不会自动对List进行排序,以适应由于添加新元素而导致的列表项排序的更改。

示例实施:

public int compareTo (Item other) { 
   return new Integer(this.getID()).compareTo(new Integer(other.getID()));
}

答案 2 :(得分:0)

自Java 8以来:

List<Item> items = new ArrayList<>();
// add elements
Collections.sort(items, Comparator.comparingLong(Item::getId));