- 基于Map接口实现,允许null键/值,非同步(线程不安全),不保证有序,也不保证顺序不随时间变化;存储着Entry(hash,key,value,next)对象
- 两个重要参数容量(Capacity)和负载因子(Load factor)
- HashMap在new后并不会分配数组,而是在第一次put时进行初始化,类似ArrayList在第一次add时分配内存空间
- HashMap的bucket数组大小一定是2的幂,如果是new的时候指定了容量且不是2的幂,实际容量会是最接近且大于指定容量的2的幂,如new HashMap<>(19),实际容量为32
- HashMap在put的元素大于Capacity*LoadFactor(默认16*0.75)之后会进行扩容
- JDK8处于提升性能的考虑,在哈希碰撞的链表长度达到TREEIFY_THRESHOLD(默认8)后,会把该链表转变成树结构
- JDK8在resize的时候,通过巧妙的设计,减少了rehash的性能消耗;resize是扩容的两倍
HashMap总结
如果您觉得对您有帮助,谢谢您的赞赏!
- 本文链接: http://www.badwolfbay.cn/2017/11/15/java-hashmap/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!