HashMap源码解析
对于HashMap,如果是java程序员,那么定然不会陌生,对于HashMap,应该说是最常用的一种Map结构了,同样在面试当中也会屡屡被提问到,常见的几种题目: HashMap的默认容量? HashMap是如何扩容的? HashMap的数组大小为什么一定是2的幂? HashMap为什么是线程不安全的? Java7到Java8做了哪些改进?为什么? 因为重要,所以我也就学习源码,并且将学习心得记录下来,与大家一起学习。 首先 再看HashMap之前,我们来简单回顾一下哈希表 哈希表是由一些基于哈希值的桶和链表所构成的。哈希桶就是可以快速检索的数据结构,举个例子 如果要寻找电话本的人的联系方式,我们可以利用拼音的首字母快速定位到这个联系人,存放这些字母的就叫哈希桶。本质上,哈希桶就是 将一个元素映射成一个可以快速检索的哈希值。 哈希桶加上数组就构成了哈希表,数组的好处是随机寻址的速度与长度无关,时间复杂度是O(1),但是哈希表最大的缺点是会发生碰撞,如果多个元素的哈希值是相同的,那么我们就说哈希值发生了碰撞,为了解决这个问题,我们将数组换成了链表,找到哈希值时,通过哈希桶里可以精确的找到所要查找的元素。平均差找时间都是O(1)。在java世界中,我们用来表达哈希表的数据结构就是HashMap。 哈希桶的实现是由hashcode实现的int hashcode 底下有对象:object1