簡體   English   中英

使用 Collections.sort(arrayListName) 按 id 對充滿對象的 ArrayList 進行排序

[英]Sorting ArrayList full of objects by their id using Collections.sort(arrayListName)

我有一個清單類,它創建了一個充滿對象 Item 的 ArrayList,它也是一個類。 我知道我必須調用Collections.sort(items); 為了對 ArrayList 進行排序(順便說一下,它被稱為 items)。 作業說我必須在Item類上使用接口,我不知道是否實現Comparator或Comparable,然后分別為compareTo()方法或compare()方法編寫什么。 在我聲明我的 ArrayList 之后,我也有Collections.sort(items)調用,這可以嗎?

編輯:我的老師剛剛澄清說她希望我們在 Item 類上實現Comparable<Item>

從 Java 8 開始:

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

你必須實現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

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) 調用,這可以嗎?

當您需要對List進行排序時,您將調用sort() sort()之后添加項目不會自動對List進行排序以適應由於添加新元素而導致的列表項目排序的變化。

示例實現:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM