[英]Sorting objects in an ArrayList without using Collections.sort
[英]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.