- HashMap
- 他的数据结构:数组、链表、红黑树
- HashMap的特点:
- 可以快速存储
- 可以快速查找
- 大小可伸缩
- Hash的算法
- 调用的map的key的hashcode ^ (hashcode >>> 16 ) 保证相对足够的散列
- Map的数组下标如何计算
- 数组默认大小为:16
- 数组下标的计算方式:hash对数组大小求余。而论计算速度:hashmap内部采用的是位运算方式:(size - 1)&hash
- Hash冲突是什么?
- 存储不同的对象但是算出来的数组下标是相同的
- 单向链表用于解决hash冲突。
- Hashmap扩容
- 扩容的标准:数组的存储比例达到75%
- 扩容的大小为原来的2倍
- 红黑树:当数组中的链表长度大于8时,将后面的数据会存在红黑树中
- 什么是红黑树:
- 树节点要么是红色要么是黑色
- 树的根节点一定是黑色
- 树的叶子节点(空节点)一定是黑色
- 红色节点的孩子节点一定是黑色
- 从任意一个节点开始向下查找,经过的黑色节点数一定是相等的。
- 概念不懂,不知道红黑树,但是可以学2/3树,红黑树和2/3树具有等价性。
- 什么是2/3树:2/3树是一个绝对平衡的二分搜索树,简单理解:就是通过把一个节点变成2节点或者3节点来保持树的两边高度一致。手画个图来的更快
- 将2/3树做一个约定。当把3节点的左侧元素作为该3节点的子节点。看图
- 按照上面的约定,2/3树和红黑色就具有等价性
- 再看一个2/3树
- 按照约定
- 再把这个树还原上去作为2/3树的样式
- 红黑树的本质,红黑树与2/3树的等价性,5条性质,红黑树保持黑平衡,牺牲平衡性,保证统计性能更优,添加删除节点比AVL树更加优。
- 什么是红黑树:
09-20