2019-07-24-JDK容器源码阅读——Hashmap
-
2 major initial paramters:
- capacity
- load factor: 当hashmap当前size>capacity*load factor时,整个hashmap会rehash,扩容成现在的两倍
- 默认0.75会比较好
-
非同步,多线程访问下当至少有一个线程结构化修改hashmap时,需要自行确保一致性。
- 结构化修改是指:有改变size的操作,如增删。
- 如果并不需要异步,那么初始化的时候最好是用Collections.synchronizedMap()方法作为包装方法
- 迭代器是fail-fast
- 冲突项的插入,是头插法,插在链表首部
- 容器的扩容都是需要在内存上重新复制的
- 相对比与Hashtable:
- Hashtable线程安全
- Hashmap允许null key和null value,线程不安全,所以效率上高一点
- Hashmap是fail-fast
- 复习一下堆:
- 定义:一颗完全二叉树
- 最大堆:树中每个节点的值都大于或等于左右子节点的值
- 最小堆:书中每个节点的值都小于或等于左右子节点的值
- 优先权队列:
- 定义:零或多个元素的集合,每个元素都有一个优先值属性。我们会对优先权队列执行 1.查找 2.插入 3. 删除的操作
- 堆是一种能够有效实现优先权队列的数据结构。这时插入和删除直接对堆顶元素进行操作