\ | Hashtable | HashMap |
---|---|---|
继承父类不同 | 继承 Dictionary | 继承AbstractMap |
默认容量 | 11 | 16 |
Table的初始化时间 | 构造函数中初始化 | 第一次使用put方法 |
并发操作 | 使用同步机制,实际应用程序中,仅仅是Hashtable本身的同步并不能保证程序在并发操作下的正确性,需要高层次的并发保护。下面的代码试图在key所对应的value值等于x的情况下修改value为x+1{value = hashTable.get(key); if(value.intValue()== x){hashTable.put(key, new Integer(value.intValue()+1)); }} 如2个线程同时执行以上代码,可能放入不是x+1,而是x+2. | 没有同步机制,需要使用者自己进行并发访问控制 |
数组的遍历方式 | Iterator 和 Enumeration | Iterator |
是否支持fast-fail | 用Iterator遍历,支持fast-fail ; 用Enumeration遍历,不支持fast-fail | 支持fast-fail |
是否接受值为null的Key或者Value | 不接受 | 接受 |
根据hash值计算数组下标的算法 | 当数组长度较小,并且Key的hash值低位数值分散不均匀时,不同的hash值计算得到相同下标值的几率较高 | 优于hashtable,通过对Key的hash做移位运算和位的与运算,使其能更广泛地分散到数组的不同位置 |
Entry数组的长度 | 缺省初始长度为11,初始化时可以指定initial capacity | 缺省初始长度为16,长度始终保持2的n次方初始化时可以指定initial capacity,若不是2的次方,HashMap将选取第一个大于initial capacity 的2n次方值作为其初始长度 |
LoadFactor负荷因子 | 0.75 | 0.75 |
负荷超过(loadFactor * 数组长度)时,内部数据的调整方式 | 扩展数组:2*原数组长度+1 | 扩展数组: 原数组长度 * 2 |
HashMap 与 Hashtable 的区别
最新推荐文章于 2024-08-29 09:45:58 发布