HashMap基础问题总结

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan

文章目录

  • 1.前言
  • 2.导图总览
  • 3.参考文章
  • 4.HashMap
  • 5.ConcurrentHashMap
  • [6.hashmap线程不安全的原因](http://www.importnew.com/22011.html)
  • [7.如何判断一个链表有环](https://mp.weixin.qq.com/s/3a-Y-EMvmxJwEBEDrep-yg)
  • 8.判断两个单向链表是否相交,如果相交,求出交点。
  • 9.判断有环的链表入口点

1.前言

近期看了一些HashMap方面的内容,主要对比的是1.7和1.8版本的,由于网上都有,我也是查阅了一些博客和技术公众号,特此将自己觉得不错的文章作为参考记录以下。

2.导图总览

HashMap基础问题总结_第1张图片

3.参考文章

https://mp.weixin.qq.com/s/fZRPogkkUfBnhbZQB5r-uw

4.HashMap

  • 1.7版本

HashMap基础问题总结_第2张图片

  • 1.8版本

HashMap基础问题总结_第3张图片

5.ConcurrentHashMap

  • 1.7版本

采用了分段锁技术,继承ReentrantLock
HashMap基础问题总结_第4张图片

  • 1.8版本

其中抛弃了原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。
HashMap基础问题总结_第5张图片

6.hashmap线程不安全的原因

  • resize死循环
  • fail-fast:使用迭代器的过程中,有其他线程修改了map

7.如何判断一个链表有环

HashMap基础问题总结_第6张图片
在时间和空间上都最优的方法是,声明两个指针,一个指针每次向下移动一个位置,第二个指针每次向下移动两个位置,如果存在环,当第一个指针跑完第一圈的时候就会和第二个指针指向同一个节点

8.判断两个单向链表是否相交,如果相交,求出交点。

两个没有环的链表相交,那么其最后一个节点就相同,判断完相交之后,找相交的节点,两个指针分别指向两个链表头部,较长的链表指针先向后移动(len1-len2)的长度,然后开始遍历两个链表,第一个相同的即相交点

9.判断有环的链表入口点

参考文章:https://blog.csdn.net/question_720520/article/details/70954181

你可能感兴趣的:(❀项目实战)