根据的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