2013-04-21 141 views
0

我有一個庫存類,它創建一個ArrayList,其中包含一個對象Item,它也是一個類。我知道我必須調用 Collections.sort(items);才能對ArrayList進行排序(通過這種方式稱爲項目)。這個任務說我必須在Item類上使用一個接口,我不知道是否要實現Comparator或Comparable,然後恭敬地寫下compareTo()方法或compare()方法的內容。在聲明我的ArrayList之後,我也調用了Collections.sort(items),這樣好嗎?使用Collections.sort(arrayListName)對ArrayList中的對象進行排序ArrayListName

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

回答

2

你必須實現Comparable,也將努力Collections.sort

如果你需要一個新的比較,不希望使用Comparable你可以創建一個新的Comparator,並用它喜歡:Collections.sort(list, new MyComparator())

  1. 您可以閱讀由Vogella撰寫的an example(link here)。請仔細閱讀。
  2. Another example這表明你實現..檢查Fruit
+0

所以我有項目實現可比,然後在我的compareTo定義()作爲 公衆詮釋的compareTo類(其他) \t { \t \t if(this.id.compareToIgnoreCase((other.getId())== 0) \t \t \t return 0; \t else if(this.id.compareToIgnoreCase(other.getId())> 0) \t return 1; \t else \t return -1; \t} 現在我只需在庫存類中調用Collections.sort(items)? – bassandguitar 2013-04-21 19:30:56

+0

是的......應該是這樣的...... – Alex 2013-04-21 19:34:02

+0

這就是我的想法,但是當我寫Collections.sort(items)時它給了我一個錯誤;它說:\t - 令牌「項目」語法錯誤,VariableDeclaratorId預期後 \t此令牌 \t - 令牌(S),錯位構建體 – bassandguitar 2013-04-21 19:40:58

0

還有的Collections.sort()兩個版本。

Collections.sort(List)Collections.sort(List,Comparator)。一個需要List,另一個需要ListComparator的實例。單個參數sort()將會期望您的班級實施Comparable並覆蓋compareTo()方法。兩個參數sort()方法需要Comparator的實例,其中您已實施Comparator並覆蓋其compare()方法。

對象應該實現Comparable如果這是對類進行排序的明確自然方法,並且任何需要對類進行排序的人通常都希望這樣做。

但是,如果排序是該班級的不常見用例,或者可能有多個排序順序,那麼Comparator是更好的選擇。

此外,我聲明我的ArrayList後,我有Collections.sort(項目)調用權,這是好嗎?

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

樣品實施:

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

我必須使用剛纔調用Collections.sort(items) – bassandguitar 2013-04-21 19:32:30

+0

的那個好,但是基於什麼字段? – NINCOMPOOP 2013-04-21 19:39:12

+0

你是什麼意思,我不明白對不起 – bassandguitar 2013-04-21 19:41:33

0

由於Java 8:

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