2012-07-19 38 views
1

你會舉一個「選擇類內自然排序」的例子。在Java中需要自然排序的解釋

我讀了docs.oracle中的Object Ordering,但並沒有說明如何在有多個元素的情況下決定自然排序。如果一個班級有諸如姓名,年齡,地址,電話號碼等元素,哪一個被挑選做自然排序?

然後,我在這裏閱讀一篇文章,可以決定自然排序。我是一個Java新手,試圖解決家庭作業的任務,並採取我的第一次刺激集合框架。

+0

要麼編寫自己的Comparator來定義排序,要麼讓類實現Comparable接口,並在compareTo方法中提供一個實現。 – user1329572 2012-07-19 02:36:40

回答

1

我更喜歡Comparator類,儘管實現看起來有點重量級。原因在於,對於某些對象,並不總是清楚比較什麼。使用.compareTo()(即實現IComparable)並不像明確的比較器那樣清晰。

BasketballPlayer player1 = new BasketballPlayer("Smith", 2.02); 
BasketballPlayer player2 = new BasketballPlayer("Jones", 1.95); 

List<BasketballPlayer> playersByHeight = new ArrayList<BasketballPlayer>(); 
List<BasketballPlayer> playersByName = new ArrayList<BasketballPlayer>(); 
playersByHeight.add(player1); 
playersByHeight.add(player2); 
playersByName.add(player1); 
playersByName.add(player2); 

Collections.sort(playersByName, new Comparator<BasketballPlayer>() { 
    @Override 
    public int compare(BasketballPlayer o1, BasketballPlayer o2) { 
     return o1.getName().compareTo(o2.getName()); 
    } 
}); 
Collections.sort(playersByHeight, new Comparator<BasketballPlayer>() { 
    @Override 
    public int compare(BasketballPlayer o1, BasketballPlayer o2) { 
     return o1.getHeight().compareTo(o2.getHeight()); 
    } 
}); 

這裏我用一個匿名類,但你可以使比較自己(命名)類,如果你喜歡。

+0

非常感謝。我只需要獲得更多寫比較者的經驗。 – 2012-07-19 02:57:06

+0

你會發現它......通常底層屬性是可比較的,所以你可以使用它的.compareTo()方法來完成骯髒的工作。並且您可以在返回值之前放置一個減號以反轉訂單。 – Tenner 2012-07-19 03:17:47

2

是的,你說得對,我們可以決定自然排序。您將實現Comparable並編寫您自己的compareTo()方法實現。在這種方法中,你決定什麼勝過。

+0

謝謝。我正在努力做到這一點,我的意思是寫一個比較器。 – 2012-07-19 02:55:15