有关1.7Hashmap问题

AveiShriety 2020-11-18 07:35:17
问题1:
使用数组+单向链表,插入时头插,扩容时链表也是头插(并发死循环)。
如果扩容时换成尾插是不是就能解决1.7Hashmap的死循环问题了?

问题2:
另外,如果使用数组+数组,hash冲突时也存在数组中,数组就可以采用二分法,理想情况复杂度为O(logN),但没有采用这种,是不是应为数组的扩容复杂度更大?
...全文
4392 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2020-11-19
  • 打赏
  • 举报
回复
问题2: 数组+数组的形式不是最优的选择, 1. 楼主是打算构建一个数组形式的链表吗?这种情况下,不能使用二分查找法(因为不是排好序的数组),增删元素时会牵扯到大量的指针拷贝。 2. 采用数组时扩容复杂度并不是首要考虑的因素,频繁的指针拷贝才是性能的瓶颈。 首先,二分查找法是针对有序数组来进行,要么在构建数组时要进行按序插入,要么在查找之前将无序数组进行排序,无论哪种都会进行大量的指针拷贝,降低性能。 其次,数组型的链表有个天生的缺陷就是,插入和删除元素时会引起指针的拷贝(指针在数组内移动位置),时间复杂度明显提升。 链表可以很好的解决这个问题,一般也不存在扩容的问题。 另外,楼主如果不懂指针是什么的话,可以把指针理解为引用,虽然不是同一个东西,但是,初学者是可以这样理解的。
KeepSayingNo 2020-11-18
  • 打赏
  • 举报
回复
问题1:你说得对,1.8就改成尾插了 问题2:不能用数组+数组,那样获取某个key的值就非常慢

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧