根據的Java 8this鏈接,以避免在地圖(HashMap, LinkedHashMap, and ConcurrentHashMap
)碰撞使用平衡樹,而不是LinkedList
實現。TreeMap的HashMap中VS在java8
那麼有什麼區別,如果:
- 兩者(
TreeMap
和其他地圖(HashMap, LinkedHashMap, and ConcurrentHashMap
)使用自我平衡樹,爲最壞的情況下可訪問性是相同的時候實現 排序的
entry
我能實現如下:public <K extends Comparable,V extends Comparable> LinkedHashMap<K,V> sortByKeys(LinkedHashMap<K,V> map){ List<K> keys = new LinkedList<K>(map.keySet()); Collections.sort(keys, (Comparator<? super K>) new Comparator<String>() { @Override public int compare(String first, String second) { return first.compareTo(second); } }); }
除分類和可訪問性TreeMap
的其他屬性還有哪些?
這不是計算器一個很好的問題,樹狀圖是當你需要時自動排序(例如字典),你似乎已經知道地圖。 –
您的觀點是什麼?在#1中,你暗示沒有區別,因爲*最差情況*是相同的。對你而言,這是非常悲觀的,假設你總是有*最壞的情況*。在#2中,你說你可以隨時在需要時對鍵進行排序,但排序很昂貴。一個'TreeMap'總是被排序的,所以如果'Map'不斷被修改,並且你不斷需要結果,那麼就會有巨大的性能差異。 'HashMap'性能更好(假設使用小數散列函數)並且不需要密鑰* * *。如果要求按鍵順序,'TreeMap'會更好。 – Andreas
...此外,無論鍵值是否在地圖中,「TreeMap」都可以爲您提供給定鍵值的相鄰鍵。一個'HashMap'不能做到這一點。排序後的列表不能做到這一點,除非您先浪費時間對列表進行排序,然後再執行二進制搜索*。 – Andreas