关于HashMap的几个问题

一、HashMap的哈希桶的初始大小是多少?

初始大小为16,并且必须为2的n次方

二、java 7 和 java 8 对于HashMap的实现有何不同?

java 7 实现方式: 数组 + 链表
java 8 实现方式: 数组 + 链表 / 红黑树(链表长度大于8)

Java 7 HashMap 存在的问题
1、并发环境下非常容易碰到死锁
2、由于hashcode算法缺陷,HashMap容易产生链表,影响性能的同时存在安全隐患
Java 8 HashMap的改进
扩容时插入顺序保持不变,防止出现环形链表,形成死循环
HashMap 扩容时的效率很低,所以在创建HashMap时就指定初始容量,避免频繁的扩容带来的性能问题,用空间换时间。

三、为什么HashMap哈希桶的大小必须为2的n次方?

在将一个元素put进一个HashMap时,需要计算其在数组中的下标,在调用该对象的hashcosd方法后算出一个int值,即为该元素的hash值,要根据该hash值来确定元素在数组中的位置,采用的算法是按位与运算: hashcode & (array.length-1) 只有桶的大小为2的幂,array.length-1得到的值二进制永远全部都是1,这样计算出来的下标分布均匀并且快速;反之,如果array.length-1得到的值二进制中存在0,做按位于运算后永远都是0,,则有些下标位置永远都会空着。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Deve...
    周二倩你一生阅读 5,045评论 0 5
  • 以前菜得不能看的时候看Java的招聘要求:Java基础扎实,熟悉常用集合类,多线程,IO,网络编程,经常会疑惑,集...
    加油小杜阅读 5,261评论 0 0
  • 那日匆匆走过青年街,惊鸿一瞥间,在经营围巾的万花丛中看到了你,瞬间,我的心中弥漫柔情!你的静逸,你的柔美,你的浅灰...
    东流水sh阅读 3,911评论 10 10
  • 最近很多人问我,你一天到晚喝茶,到底是在喝什么?这个问题一下把我问到了,对啊,我特么到底是在喝什么? 前几天在越南...
    立七阅读 5,177评论 0 0
  • 这几天,真是折腾得够呛。先生出差,大儿子发烧,小儿子长牙,最后我自己也发烧了。 但是,最最折腾的不是我发烧,是发烧...
    放慢脚步放低声音阅读 1,045评论 0 0

友情链接更多精彩内容