1.继承的类 首先HashTable产生于JDK1.0,HashMap产生于JDK1.2,看类声明: public class Hashtable K , V extends Dictionary K , V implements Map K , V , Cloneable , java . io . Serializable {public class HashMapK,V extends Abstract
1.继承的类
首先HashTable产生于JDK1.0,HashMap产生于JDK1.2,看类声明:
public class Hashtable<K,V>extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
其中HashTable多继承了一个Dictionary,但是在Dictionary类注释上有这么一句话,标识其已经废除了,多了一个elements方法,一个contains方法,contains与containsValue方法一样的。
* <strong>NOTE: This class is obsolete. New implementations should* implement the Map interface, rather than extending this class.</strong>
2.键值为null情况
HashTable允许key与value为null的情况,HashTable不允许
3.初始化容量与扩容
HashTable初始化容量为11,每次扩容2n+1
HashMap初始化容量为16,每次扩容为原来2倍
如果在创建对象时给定大小,HashTable为指定的大小,HashMap为2的指定的幂次方大小
4.线程安全
HashTable为线程安全的,但是已经不推荐使用,要使用用ConcurrentHashMap
HashMap线程不安全
* Java Collections Framework</a>. Unlike the new collection* implementations, {@code Hashtable} is synchronized. If a
* thread-safe implementation is not needed, it is recommended to use
* {@link HashMap} in place of {@code Hashtable}. If a thread-safe
* highly-concurrent implementation is desired, then it is recommended
* to use {@link java.util.concurrent.ConcurrentHashMap} in place of
* {@code Hashtable}.
实时内容请关注微信公众号,公众号与博客同时更新:程序员星星