java:maps zoo,选择什么

mav*_*rik 7 java hashtable hashmap map linkedhashmap

我是Java World的新手(因为我在C/C++中编写初级).我在我的应用中使用地图.由于java.util.Map是抽象的,我需要实例化它的实现.通常我用的HashMap是:

Map<String, MyClass> x = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

但在Java文档,我发现许多其他的实现,如TreeMap,LinkedHashMap,HashTable,等我想知道我是否可以继续使用盲目的HashMap或有任何重要的差异Map实现.

要点的简要列表就可以了.谢谢.

Mar*_*nik 12

  • 从不打扰Hashtable,它是Java 1.0的遗留物;
  • HashMap由于O(1)查找和依赖,equals并且hashCode保证为所有Java对象实现,因此是通用默认值;
  • TreeMap为你提供了对地图条目的排序迭代(加上更多 - 参见NavigableMap),但需要一个比较策略并且插入和查找速度较慢 - O(logN) - 比HashMap;
  • LinkedHashMap 迭代条目时保留插入/访问顺序.

SortedMap实现提供了一些很棒的功能,比如headMaptailMap.NavigableMap实现为假设排序键的操作提供了更多具有极佳性能的功能.

更进一步的是java.util.concurrent地图实现,例如ConcurrentHashMap,它提供了很好的并发性能和原子获取/放置操作.

  • `HashMap`查找不是'O(1)` - 这在很大程度上取决于散列函数,最坏情况是`O(n)`.在`get`的源代码中查看for循环 - http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/a42d6999734b/src/share/classes/java/util/HashMap.java (2认同)