HashMap 与 Hashtable 的区别

\ 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)