目前,我有一個問題,我有ID的列表,每一個相關等級。AddInOrder最佳結構? Java的功課
例如:
ID:SCORE
1:12
2:15
3:2
4:99
我想循環這些並添加t按照得分順序排列成一個結構。因此,輸出將類似於
{4,2,1,3}
什麼是Java這樣做的最佳方式?隊列?
感謝 菲利普
目前,我有一個問題,我有ID的列表,每一個相關等級。AddInOrder最佳結構? Java的功課
例如:
ID:SCORE
1:12
2:15
3:2
4:99
我想循環這些並添加t按照得分順序排列成一個結構。因此,輸出將類似於
{4,2,1,3}
什麼是Java這樣做的最佳方式?隊列?
感謝 菲利普
我覺得這是學習Comparable
界面的好時機。你可以做,通過score
進行比較,並打印其id
時toString()
被稱爲類。正如前面提到的,使用自定義Comparator
也就夠了,但如果你從來沒有與Comparable
工作,我建議學習,第一。
下面就來的JavaDoc鏈接:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html
你應該知道,兩個對象O1和Comparable<T>
類型的O2,o1.compareTo(o2)
將返回:
這些信息將幫助你寫你的compareTo
功能的自定義類。
一旦你的類寫的,那麼Java的Collections
類提供了sort
方法,將排序Comparables
的List
。簡單!
這裏的鏈接爲:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#sort%28java.util.List%29
是不是Collection.sort(list, comparator)
合適?
(comparator
是一類實施Comparator
並指定比較邏輯)
(或者,你的類可以實現Comparable
接口,以提供在內部比較邏輯)
它不是「AddInOrder」,但它滿足您的要求。
這裏有多種選擇。最後對列表進行排序可能足以達到您的目的。
如果你想確保訂單保持不變所有的時間,然後排序列表/樹是要走的路。 Java提供了一個PriorityQueue類。
但是,作爲一個實現細節,您需要創建一個類來封裝ID
和Score
,並且該類可以與您的特定排序選擇相媲美。
將這些項目逐個插入排序集(如a tree set)。使用一個類來保存ID:分數,並寫一個比較根據自己的分數這一類的兩個實例比較。
編輯:看到你已經擁有的名單,在這種情況下,分揀收集更好。
要知道,一套禁止多個相同的元素。這裏可能還行。 – notnoop 2010-01-07 15:07:33