1.比较一下两者
1)HashMap不是线程安全的,HashTable是线程安全。
2)HashMap允许空(null)的键和值(key),HashTable则不允许。
3)HashMap性能优于Hashtable。
HashTable容器使用synchronized来保证线程安全,
但在线程竞争激烈的情况下HashTable的效率非常低下。
因为当一个线程访问HashTable的同步方法时,
其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。
如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,
并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。
Map
1.Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable.
2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable.
3.HashMap允许键或值为空,而HashTable不允许键或值为空.
4.继承关系不同:
HashTable
public class Hashtable<K,V>
extends Dictionary<K,V>1.0
implements Map<K,V>, Cloneable, java.io.Serializable {}
HashMap
public class HashMap<K,V>
extends AbstractMap<K,V>1.2
implements Map<K,V>, Cloneable, Serializable{}
我们可以使用ConcurrentHashMap[1.5]来代替HashTable吗?
我们知道HashTable是synchronized的,但是ConcurrentHashMap同步性能更好,因为它仅仅根据同步级别对map的一部分进行上锁(分段式锁)。可以拿单例模式的双层锁模式来进行对比
//list((数组)有序可重复,查询方便,插入,删除 慢)
set(链表)(不重复,插入删除快,查询慢) map(map(k,v)hash算法保证了他的效率)