我有一个库存类,它创建一个包含对象Item的ArrayList,它也是一个类。我知道我必须打电话
Collections.sort(items);
以便对ArrayList进行排序(顺便称之为它的项目)。赋值说我必须在Item类上使用接口,我不知道是否要实现Comparator或Comparable,然后为compareTo()
方法或compare()
方法编写什么尊敬。在我声明我的ArrayList之后,我立即进行了Collections.sort(items)
调用,这没关系吗?
编辑:我的老师刚刚澄清她希望我们在Item类上实现Comparable<Item>
。
答案 0 :(得分:2)
您必须实施Comparable
,它才会有效Collections.sort
如果您需要新的比较器并且不想使用Comparable
,则可以创建新的Comparator
并将其用作:Collections.sort(list, new MyComparator())
Fruit
类答案 1 :(得分:0)
Collections.sort()
有两个版本。
Collections.sort(List)和Collections.sort(List,Comparator)。一个需要List
,另一个需要List
和Comparator
的实例。单个参数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));