4

我有一个库存类,它创建一个充满对象 Item 的 ArrayList,它也是一个类。我知道我必须调用 Collections.sort(items);才能对 ArrayList 进行排序(顺便说一下,它被称为 items)。作业说我必须在 Item 类上使用一个接口,我不知道是否要实现 Comparator 或 Comparable ,然后分别为compareTo()方法或compare()方法写什么。在我声明我的 ArrayList 后,我​​也有Collections.sort(items)电话,可以吗?

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

4

3 回答 3

4

从 Java 8 开始:

List<Item> items = new ArrayList<>();
// add elements
Collections.sort(items, Comparator.comparingLong(Item::getId));
于 2018-02-05T03:33:45.550 回答
1

你必须实施Comparable,它会奏效Collections.sort

如果您需要一个新的比较器并且不想使用它,Comparable您可以创建一个新的比较器并Comparator像这样使用它:Collections.sort(list, new MyComparator())

public class Fruit implements Comparable<Fruit>{
    
    private String fruitName;
    private String fruitDesc;
    private int quantity;
    
    public Fruit(String fruitName, String fruitDesc, int quantity) {
        super();
        this.fruitName = fruitName;
        this.fruitDesc = fruitDesc;
        this.quantity = 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;
    }

    public int compareTo(Fruit compareFruit) {
    
        int compareQuantity = ((Fruit) compareFruit).getQuantity(); 
        
        //ascending order
        return this.quantity - compareQuantity;
        
        //descending order
        //return compareQuantity - this.quantity;
        
    }   
}

来源:mkyong

于 2013-04-21T19:26:00.093 回答
0

有两个版本Collections.sort()

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

如果这是对类进行排序的清晰自然方式,则对象应该实现Comparable,并且任何需要对类进行排序的人通常都希望这样做。

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

另外,我在声明我的 ArrayList 后立即调用了 Collections.sort(items),这样可以吗?

当您sort()需要对List. 之后添加项目sort()不会自动排序List以适应由于添加新元素而导致的列表项目排序的变化。

示例实现:

public int compareTo (Item other) { 
   return new Integer(this.getID()).compareTo(new Integer(other.getID()));
}
于 2013-04-21T19:26:45.377 回答