venaissance / myBlog

💡 致力于提升技术学习效率的博客
https://venaissance.github.io/myBlog
23 stars 3 forks source link

算法基础02-栈、队列、哈希表、映射、集合 #2

Open venaissance opened 4 years ago

venaissance commented 4 years ago

一、栈、队列、双端队列、优先队列本质

二、哈希表、映射、集合本质

三、Queue 和 Priority Queue源码分析

Priority Queue是通过数组实现一个堆,元素在queue数组中并不是完全有序的,仅堆顶元素最大或最小。

poll方法,实际上是获取堆顶元素,然后调整堆。

调整堆的方法(大顶堆为例):

1.判断是否传入comparator,有则按照comparator顺序,否则按照自然顺序排序

2.取节点左右孩子节点的最大值,与父节点交换

四、Java HashMap总结

image

  1. 先调用key的hashCode方法得到hashCode值
  2. 再通过Hash算法中的高位运算和取模运算,确定键值对的存储位置
  3. 当HashCode值相等时,发生哈希碰撞,此时先判断当前地址下的的链表长度是否大于8,如果大于8就把链表转为红黑树,否则进行链表的插入操作
  4. 插入成功后,判断实际存在的键值对数量是否超过最大容量threshold,如果超过就扩容

参考

  1. Java 8系列之重新认识HashMap