2016-09-16 79 views
0

假設鍵值對來自一個流,並且我們逐個讀取它們並將它們添加到需要按值排序的TreeMap然後鍵,我怎麼能做到這一點?我不是在討論任何中間映射,我可以使用它輕鬆編寫比較器,從該映射中獲取相應的值並在排序邏輯中使用它。它是不允許的。直接,它是如何可能的。如果不使用其他數據結構,我不認爲它是可能的。或者我在某處愚弄它?任何建議!按照值排序的順序將鍵值對添加到TreeMap中

藉此例如:

蘋果,2
香蕉,20
橙,5

它應該是在樹爲:

蘋果,2
orange,5
b anana,20

+0

TreeMap的javadoc是顯式的:'基於紅黑樹的NavigableMap實現。該地圖根據其按鍵的自然排序,或由地圖創建時提供的比較器進行排序,具體取決於使用哪個構造函數。「因此,除非您提供比較器,否則僅按鍵進行排序。這就是說,你可以使用帶有自定義比較器的TreeMap,除非這也是不允許的。 – Taylor

回答

0

如果只允許使用其他結構,那麼我會在樹形圖中使用包含原始鍵和值的合成鍵。在這種情況下,你會碰到這樣的:

[key, value] -> value 

,因爲你在這兩個地方是指相同的值對象時,它不會使用更多的內存。它需要有自定義的比較器來比較合成鍵的值部分。

所以最後你必須定義兩個類。

PS:當然,您將無法使用此地圖通過原始鍵找到價值。它只能用於對鍵值對進行排序。通過這種方式,使用TreeSet和鍵值對作爲元素會更好。