2010-01-07 38 views
1

目前,我有一個問題,我有ID的列表,每一個相關等級。AddInOrder最佳結構? Java的功課

例如:

ID:SCORE

1:12

2:15

3:2

4:99

我想循環這些並添加t按照得分順序排列成一個結構。因此,輸出將類似於

{4,2,1,3}

什麼是Java這樣做的最佳方式?隊列?

感謝 菲利普

回答

3

我覺得這是學習Comparable界面的好時機。你可以做,通過score進行比較,並打印其idtoString()被稱爲類。正如前面提到的,使用自定義Comparator也就夠了,但如果你從來沒有與Comparable工作,我建議學習,第一。

下面就來的JavaDoc鏈接:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html

你應該知道,兩個對象O1和Comparable<T>類型的O2,o1.compareTo(o2)將返回:

  • -1,如果01 < O2(在排序由T,O1和O2)
  • 0如果O1 O2 ==(再次,在排序中,不一定對象平等)的類型定義
  • 1如果O1> O2

這些信息將幫助你寫你的compareTo功能的自定義類。

一旦你的類寫的,那麼Java的Collections類提供了sort方法,將排序ComparablesList。簡單!

這裏的鏈接爲:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#sort%28java.util.List%29

2

是不是Collection.sort(list, comparator)合適?

comparator是一類實施Comparator並指定比較邏輯)

(或者,你的類可以實現Comparable接口,以提供在內部比較邏輯)

它不是「AddInOrder」,但它滿足您的要求。

0

這裏有多種選擇。最後對列表進行排序可能足以達到您的目的。

如果你想確保訂單保持不變所有的時間,然後排序列表/樹是要走的路。 Java提供了一個PriorityQueue類。

但是,作爲一個實現細節,您需要創建一個類來封裝IDScore,並且該類可以與您的特定排序選擇相媲美。

0

將這些項目逐個插入排序集(如a tree set)。使用一個類來保存ID:分數,並寫一個比較根據自己的分數這一類的兩個實例比較。

編輯:看到你已經擁有的名單,在這種情況下,分揀收集更好。

+0

要知道,一套禁止多個相同的元素。這裏可能還行。 – notnoop 2010-01-07 15:07:33