HashMap和Hashtable的区别

来源:互联网 发布:美国研究生预科 知乎 编辑:程序博客网 时间:2024/06/05 04:04

常常使用java.util.HashMap、java.util.Hashtable数据结构类,比较如下:

1、安全性

HashMap不安全:原因,(1)transient(介绍参考:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html)修饰,为了提高速度而不顾安全, (2)键值可以为空

Hashtable安全  :原因,(1)syncronized修饰,线程同步;                        (2)键和值都不允许为空

2、java源码

(1)HashMap

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable{}

(2)Hashtable

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable {}

3、内容

HashMap    键可重复,如果键重复,那么打印结果以最后一次put方法为准

例:

Map ma=new HashMap();
ma.put("123", "22");
ma.put("123", "2");
System.out.println(ma);

最后打印:{123=2}

Hashtable   键不可重复,如果键重复那么下一次的put方法将会覆盖上一次的值

如:Map map=new Hashtable();
map.put("123", "1");
map.put("123", "13");
System.out.println(map);

最综打印:{123=13}而不是{123=1}

4、默认数组大小

HashMap默认数组大小为16,加载因子为0.75,重新hash阈值为12.

Hashtable默认数组大小为11,加载因子为0.75,重新hash阈值为8.

5、扩容

HashMap和Hashtable的数组扩容方式不同。

HashMap中的数组容量大小始终保证为2的指数。重新hash,扩充容量方式为,当前容量大小*2.

Hashtable扩充容量方式为:int newCapacity = oldCapacity * 2 + 1;


参考文档:http://blog.csdn.net/hsuxu/article/details/7454172




0 0
原创粉丝点击