读书人

HashMap跟Hashtable分析

发布时间: 2012-11-01 11:11:32 作者: rapoo

HashMap和Hashtable分析
1.先说继承关系吧
Java代码
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也是继承了Map接口。它们的不同是Hashtable(since JDK1.0)就继承了Dictionary这个抽象类,而HashMap(since JDK1.2)继承的则是AbstractMap这个抽象类。因为在Hashtable中看到继承Map后所实现的方法是JDK1.2版本时加上去的,所以可能是在JDK 1.2开发时Sun工程师出于统一的考虑使得Hashtable也继承了Map接口。

2.我们从同步和并发性上来说说它们两个的不同。

可以通过这两个类得源码来分析,Hashtable中的主要方法都做了同步处理,而HashMap则没有。可以说Hashtable在默认情况支持 同步,而HashMap在默认情况下是不支持的。我们在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加 同步处理了。对HashMap的同步处理可以使用Collections类提供的synchronizedMap静态方法;或者直接使用JDK5.0之后 提供的java.util.concurrent包里的ConcurrentHashMap类。

3.它们对于null值的处理方式了
我们依然能够从源代码中得知,Hashtable中,key和value都不允许出现null值。



结果
public V put(K key, V value) {             if (key == null)                     return putForNullKey(value);             int hash = hash(key.hashCode());//hashcode             int i = indexFor(hash, table.length);             //…     }           static int hash(int h) {                h ^= (h >>> 20) ^ (h >>> 12);                 return h ^ (h >>> 7) ^ (h >>> 4);         }  


本文是从网上一篇比较有趣的帖子上转载而来,原文链接
http://www.java3z.com/cwbwebhome/article/article8/81437.html?id=4314

读书人网 >编程

热点推荐