- 继承的父类不同
HashTable继承Dictionary类 HashMap继承AbstractMap类 不过都实现了Map,Cloneable(可重复),Serializable(可序列化)
- 对外提供的接口不同
HashTable比HashMap多提供了elments()和contains()两个方法
elments()方法继承自HashTable的父类Dictionary,elments()方法返回HashTable中的value的枚举
contaions()方法判断该HashTable是否包含传入的value
- 对Null key和null value的支持不同
HashTable即不支持Null key也不支持Null value key为Null时,调用Put方法,需要获取key的HashCode就会报错 value为空是,hashTable对其做了限制,当value为空时直接排除异常 HashMap中支持Null key也支持Null value
- 线程安全性不同
HashTable是线程安全的,他的每一个方法都加入了Synchronize方法,在多线程的并发的环境下,可以直接使用HashTable,不需要自己为他的方法实现同步 HashMap是线程不安全的,在多线程的并发环境下,可能会产生死锁等问题,使用HashMap需要自己添加同步 但是HashMap的效率会比HashTable好很多,在多线程可以使用ConcurrentHashMap他的效率比HashTable快很多,因为ConcurrentHashMaps使用的分布锁,并不把整个数据锁定
- 初始容量大小和每次扩容大小不同
HashTable默认初始化11,每次扩容2n+1, HashTable主要是为了让结果更加均匀,减少哈希冲突, HashMap初始化16,每次原来的2倍 HashMap管局Hash的计算效率问题,为了加快速度,将哈希表大小固定位2的幂,分布不均匀, HashMap为了解决分布不均匀又对Hash算法做了一些改动,这导致HashTable与HashMap算法不同
- hash算法不同
没有多余介绍
-
HashTable
优点: 线程安全,每个方法都继承了Synchronize方法,(但是可以是用ConcurrentHashMap,比HashTable的效果好) 减少了hash冲突 缺点: 速度相对来说
-
HashMap
优点: 效率高 支持Null key 与 value(方便) (好像相对来说就这一个) 缺点 线程不安全 分布不均匀,但是做过改动