2016-11-25 88 views
0

當我運行下面的代碼時,Collection.sort(l)會拋出異常。Java集合分類

異常在線程 「主要」 java.lang.ClassCastException: learning.CollectionSort不能轉換爲java.lang.Comparable的

public class CollectionSort { 
    public static void main (String[] args){ 
     List l = new ArrayList(); 
     CollectionSort obj1 = new CollectionSort(); 
     CollectionSort obj2 = new CollectionSort(); 
     l.add(obj1); 
     l.add(obj2); 
     Collections.sort(l); 
     for (int i = 0; i < l.size(); i++){ 
      System.out.println(l.get(i)); 
     } 
    } 
} 

這是因爲我們必須實現相當或比較用於排序自定義對象。通常,我們將在用於排序的對象中擁有屬性。

但是在上面的代碼中,我們沒有這個類的屬性。那麼可以對上面的列表進行排序?請分享你的想法。

+0

那麼如果你想排序,你需要實現'可比較'。 – Mritunjay

+0

嗯,沒有。該列表中有兩個'CollectionSort'對象。爲了排序它,排序方法必須告訴哪個對象比其他對象「少」。如果你沒有提供一種方法讓它知道,它怎麼能這樣做呢?你認爲「排序」會對這些對象產生什麼影響? – ajb

回答

0

但是在上面的代碼中,我們沒有這個類的屬性。那麼可以對上面的列表進行排序?

是的,你可以寫一個Comparator,基於哈希碼(hashCode())或字符串值(toString())的訂單,並用它來排序列表...

Collections.sort(l, new MyComparator()). 

但目前尚不清楚將由此獲得,因爲所產生的命令沒有特別的意義。事實上,如果你可以自由選擇你想要排序的基礎,那麼爲什麼不按列表中的索引對列表元素進行排序呢?然後你的列表總是被細分,而不需要調用任何方法。

+0

感謝您的回覆。我意識到在排序時沒有意義。只是想知道它是如何工作的,我試過這個。何時應該使用比較器並在應用中進行比較。 – Vijay