题目:
请说说HashMap和Hashtable的区别。
分析:
网上有很多讲述这个内容的帖子,有的把来龙去脉讲述的清楚,有的只是断章取义。现在从jdk文档里发掘他们的关系。
解答:
HashMap继承如下:
java.lang.Object
——java.util.AbstractMap<K,V>
————java.uitl.HashMap<K,V>
Hashtable继承如下:
java.lang.Object
——java.uitl.Dictionary<K,V>
————java.util.Hashtable<K,V>
可以看出两个类的父类不同。Hashtable继承的是老的Dictionary类,HashMap继承的是AbstractMap类。Hashtable的方法是Synchronize的,而HashMap的不是。当多个线程访问Hashtable时,不需要为它的方法实现同步,而HashMap必须为之提供同步(在我其他类别的博客里我会专门写一个例子,这边外同步就不做多说)。
两个类均实现了的接口:Serializable,Cloneable,Map<K,V>
来让我们看看他们的方法:
重要的方法:put(K key, V value),get(Object key),remove(Object key, V value),size().(增、取、删、取长)
一些明显的字眼:Set视图,Collection视图,默认加载因子(0.75),这些字眼听说过但是从来没有深入研究过(以后有机会会对他们进行分析与解释)。
还有一个重要的Hashtable的子类Properties类,在平常出现的次数比较多。可以保存到文件中。