If a thread-safe implementation is not needed, it is recommended to use HashMap in place of Hashtable. If a thread-safe highly-concurrent implementation is desired, then it is recommended to use java.util.concurrent.ConcurrentHashMap in place of Hashtable.
HashTable是同步的,可以在多线程下使用,HashMap不是多线程安全的。
首先Hashtable和HashMap都实现了
java.util.Map接口,但Hashtable扩展自java.util.Dictionary而HashMap扩展自java.util.AbstractMap,内部的就不提了,从使用上看下有什么区别:Hashtable的
key和value必须是非null的,而HashMap的key和value都允许为null;Hashtable是线程安全的,而HashMap是非线程安全的;
Hashtable多了一些公开方法,如
contains等同于HashMap的containsValue;多了elements和keys,继承自java.util.Dictionary返回的都是Enumeration类型另外,其实java是不推荐使用Hashtable的,见doc:
Hashtable继承的
Dictionary也被官方标定为过时的(obsolete),推荐以Map替代。另外相似的官方建议替代的类有:java.util.Vector建议使用java.util.ArrayList替代;java.util.Stack建议使用java.util.ArrayDeque替代;以上来自 Java7
有3类:hashtable, hashmap, concurrenthashmap
hashtable是线程安全多用于多线程开发
hashmap是线程非安全,所以用在多线程中有一定问题
concurrenthashmap也是同步的,但是优于hashtable,因为hashtable是整张表加锁,而它是分段加锁机制