2018-05-08 HashMap和hashtable区别
2018-05-08 本文已影响0人
MiaLing007
相同点:
一: 存储方式相同,利用一个内部类,实现的是Map.Entity接口,内部实现不一样,但是都是以节点方式进行存储的。是一种单向链表,链表是基于数组的。
两者都是散列表,存储形式都是key-value键值对。
不同点:
一,HashMap可以允许key为null,value为null,HashTable都不允许为null
如果key为空时,hashmap会创建一个null的对象,而hashtable则会抛出空指针异常
hashtable的put中代码:
public synchronized V put(K key, V value) {
// Make sure the value is not null
if (value == null) {
throw new NullPointerException();
}
hashmap的put中代码:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);//创建一个nullkey
二,计算hashcode的方法太相同。
hashMap和HashTable它们计算一个对象的hashCode时的方法不一样。HashMap不是直接用对象自己的hashCode,而是自己重新计算一下hashCode,而HashTable直接用对象本上的hashCode
三,继承的类不一样
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
四, 同步机制不一样
HashMap没有提供同步机制,是线程不安全的,需要自己在外面写同步代码,HashTable 部分方法上有自己的 synchronize 同步,是线程安全的。
五,HashMap中没有contains()方法。
六, 它们的数组初始化大小和扩容方式不一样,HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。