前言:
早年间,HashMap是面试场上必问的面试题,出去面试也会经常碰见。为了彰显个人学习的深度,以及领悟力。我们必须在面试的过程中,说点不一样的东西,像什么数组+链表的数据结构、Java8的链表树形化这种千篇一律的答案,已经没有任何新颖之处了,是非常平庸的答案。所以我们要说,就必须说点有意思的。在这个知识点上,必须把面试官拿下,接下来为了让大家从根源上认识HashMap,并且可以深入浅出的把它表达清楚,写出了如下的博客文章
①. hashCode方法返回值是int类型
- ①. hashCode返回类型为int,意味着,不同的对象可能存在同样的hashCode值
- ②. int取值范围是固定的,而对象是可以无穷多的,用有穷的数值去表示无穷的对象,那么肯定会存在重复
②. HashMap的综合效率是如何保证的-空间换时间
①. 数组寻址快,但是插入、删除慢。链表寻址慢,但是插入、删除快。而哈希表(散列),刚好介于二者之间,综合性能比较给力
②. HashMap底层也是散列,通过key的hashCode值,经过一个计算(取模),可以迅速定位到数据的存储位置。但是,散列说到底,也是数组,只是一个空间比较富裕的数组而已,一个数据被存储到这个数组上,一般是用hashCode值对这个数组长度取模,得到数组下标的位置,从而快速定位。想要同一个位置冲突的几率小,那么只有增大空间,让离散度变大,这样效率才可保证!这也就是程序届有名的"空间换时间"的概念