HashMap核心原理
预备知识
1. 算法复杂度:大 O 表示法
- 大O表示法是一种特殊的表示法,指出了算法的速度有多快。
- O(n):表示该算法需要计算n次,比如常见的for循环:
for(int i=0;i<n;i++){
...
}
- O(1):无论多少元素参与运算,复杂度始终是计算一次,这个就是典型的最优解。例如查找数组元素:
int[] a ={
1,2,3,4,5};
a[0];
2. 位运算
- 二进制的位运算包括(&、|、^、~、>>、<<、>>>),这种运算速度很快。
- 1 btye(字节)=8 bit(位),一个8bit就可以表示一个二进制,例如 0000 0010
&(与运算)
: 两个位都为1时,结果才为1
0000 0011 & 0000 0101 = 0000 0001 ,因此 3&5 的值得1。
(n - 1) & hash
3|5即 0000 0011| 0000 0101 = 0000 0111,因此,3|5的值得7。
HashMap产生背景
- HashMap是集合框架中的一员,源码中作者有四位,都是大神级别的人物。
- HashMap是集数组和链表的优点而成的一个集合,数组的优点是查询快,复杂度是O(1)
HashMap做了哪些设计优化
源码解读
- 源码位置:jdk1.8->rt.jar->java->util->HashMap
手写简易版
总结