2016-04-25 38 views
5

我們知道我們可以使用Java的分類收集與基於計數的子表

Collections.sort 

排序插入所有元素後的列表。

但是,如果一次插入元素一次,也許SortedMap更有效?

雖然,SortedMap缺少subList方法。

我需要的是類似SortedMap的東西可以有效地插入少量元素多次,並且總是可以通過Comparator接口自上而下獲得1〜1000個子列表。

有何建議?

+0

This [question](http://stackoverflow.com/questions/8725387/why-is-there-no-sortedlist-in-java)可能會幫助你。 – zencv

+0

@zencv這個問題沒有提到'subList',那正是我需要的 – rufushuang

+0

NavigableSet不支持這些類型的子視圖嗎?我認爲像'NavigableSet.subSet(start,end)'這樣的方法可能可以在這裏工作。 –

回答

1

我覺得SortedSetNavigableSet這反過來又喜歡subSettailSetheadSetceilingfloor對這類問題的方法。

所以,你可以這樣做:

SortedSet<Integer> set = new TreeSet<>(Arrays.asList(0,1,2,3,4,5,6,7,8,9)); 
SortedSet<Integer> subset = set.subSet(3,7); 
System.out.println(subset); //[3,4,5,6] 

顯然,你可以創建你TreeSet與任何你想要的Comparator,並執行搜索的順序,你覺得更方便。

Comparator<Integer> reverse = Collections.reverseOrder(); 
SortedSet<Integer> set = new TreeSet<>(reverse); 
//same thing here 
+0

這是一個錯誤的答案。所有子集/尾/頭...和比較器都是基於數值的,而不是基於計數的。 – rufushuang

+0

@rufushuang一個更好的評論應該是:「Edwin,因爲比較者是基於價值的,因爲你提出的所有方法都是這樣,你認爲我可以從中獲得一系列不變的元素,然後」?你可以看到我的評論風格會鼓勵我回來並嘗試改進或糾正我的答案。你可以用蜂蜜比用醋做更多的蒼蠅。 –