2019独角兽企业重金招聘Python工程师标准>>>
HashMap提供了三个构造函数:
HashMap():构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity):构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity, float loadFactor):构造一个带指定初始容量和加载因子的空 HashMap。
为什么增大加载因子可以减少Hash表所占用的内存空间,但会增加查询数据的时间开销。
为什么减小加载因子(存指定个数数据的所需空间越多)可以提高查询数据的性能,但会增加Hash表所占用的内存空间?
如果加载因子是0.75,hashmap(16)最多可以存储12个元素,想存第16个就得扩容成32 (因为HashMap的底层数组长度总是2的n次方,在构造函数中存在:capacity <<= 1;这样做总是能够保证HashMap的底层数组长度为2的n次方)。
如果加载因子是1,hashmap(16)最多可以存储16个元素。
同样存16个元素,一个占了32个空间,一个占了16个空间的内存。
空间越少,hashcode重复的可能性就越大,同一个空间里面的元素数目就可能会增加,会增加查找的时间。
参考:http://www.cnblogs.com/chenssy/p/3521565.html
HashMap和HashTable区别:
总结:
HashMap | 线程不安全 | 允许有null的键和值 | 效率高一点、 | 方法不是Synchronize的要提供外同步 | 有containsvalue和containsKey方法 | HashMap 是Java1.2 引进的Map interface 的一个实现 | HashMap是Hashtable的轻量级实现 |
HashTable | 线程安全 | 不允许有null的键和值 | 效率稍低、 | 方法是是Synchronize的 | 有contains方法方法 | 、Hashtable 继承于Dictionary 类 | Hashtable 比HashMap 要旧 |