首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HashMap跟Hashtable分析

2012-11-01 
HashMap和Hashtable分析1.先说继承关系吧Java代码public class Hashtable k,vextends Dictionary k,vi

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

热点排行