社区
Java SE
帖子详情
有关1.7Hashmap问题
AveiShriety
2020-11-18 07:35:17
问题1:
使用数组+单向链表,插入时头插,扩容时链表也是头插(并发死循环)。
如果扩容时换成尾插是不是就能解决1.7Hashmap的死循环问题了?
问题2:
另外,如果使用数组+数组,hash冲突时也存在数组中,数组就可以采用二分法,理想情况复杂度为O(logN),但没有采用这种,是不是应为数组的扩容复杂度更大?
...全文
4392
2
打赏
收藏
有关1.7Hashmap问题
问题1: 使用数组+单向链表,插入时头插,扩容时链表也是头插(并发死循环)。 如果扩容时换成尾插是不是就能解决1.7Hashmap的死循环问题了? 问题2: 另外,如果使用数组+数组,hash冲突时也存在数组中,数组就可以采用二分法,理想情况复杂度为O(logN),但没有采用这种,是不是应为数组的扩容复杂度更大?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
冰思雨
2020-11-19
打赏
举报
回复
问题2: 数组+数组的形式不是最优的选择, 1. 楼主是打算构建一个数组形式的链表吗?这种情况下,不能使用二分查找法(因为不是排好序的数组),增删元素时会牵扯到大量的指针拷贝。 2. 采用数组时扩容复杂度并不是首要考虑的因素,频繁的指针拷贝才是性能的瓶颈。 首先,二分查找法是针对有序数组来进行,要么在构建数组时要进行按序插入,要么在查找之前将无序数组进行排序,无论哪种都会进行大量的指针拷贝,降低性能。 其次,数组型的链表有个天生的缺陷就是,插入和删除元素时会引起指针的拷贝(指针在数组内移动位置),时间复杂度明显提升。 链表可以很好的解决这个问题,一般也不存在扩容的问题。 另外,楼主如果不懂指针是什么的话,可以把指针理解为引用,虽然不是同一个东西,但是,初学者是可以这样理解的。
KeepSayingNo
2020-11-18
打赏
举报
回复
问题1:你说得对,1.8就改成尾插了 问题2:不能用数组+数组,那样获取某个key的值就非常慢
HashMap
1.7
死循环
问题
HashMap
1.7
死循环
问题
jdk
1.7
HashMap
的
问题
jdk
1.7
的
HashMap
HashMap
从jdk1.8以后有较大改动,主要有两点: 插入元素改成尾插法(
1.7
是头插法) 链表长度超过8个转成红黑树(
1.7
一直是链表) jdk为何会做这两点改变呢? 下面我们通过
1.7
的源码来看看这两点有什么
问题
或者不足之处 头插法改成尾插法 我们先来看看jdk
1.7
HashMap
中插入元素的源码 public V put(K key, V value) { if (key == null) return putForNullKey(valu
图解JDK
1.7
中
HashMap
头插法扩容造成的死循环
问题
HashMap
是线程不安全的,在并发使用
HashMap
时很容易出现一些
问题
,其中最典型的就是并发情况下扩容之后会发生死循环,导致CPU占用100%。同时,这也是一个高频面试题。本文通过解读
HashMap
源码并结合实例,来具体分析
HashMap
扩容发生的死循环
问题
。
HashMap
1.7
中的线程安全
问题
JDK
1.7
HashMap
的死循环
问题
JDK
1.7
中
HashMap
的多线程并发出现死循环
问题
JDK
1.7
中
HashMap
的多线程并发出现死循环
问题
没错!又是
HashMap
这个鬼东西,今天与同事讨论到了:多线程下
HashMap
在jdk
1.7
中形成环形链表死循环
问题
。借此机会我们这次再看一遍原因,加深印象。以下讨论基于jdk
1.7
的
HashMap
,此文章基于视频 JDK7的
HashMap
头插法循环的
问题
,这么难理解吗? 讲的非常清晰,建议观看! 文章基于的假设是对jdk
1.7
与jdk1.8中的
HashMap
有一定的认知,明白这几个基础知识,这很关键! jdk
1.7
中
HashMap
的数据结构基于数
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章