Java面试值之集合

发布于:2024-03-01 ⋅ 阅读:(71) ⋅ 点赞:(0)

持续更新中~

1.HashMap底层?扩容机制?1.7-1.8的升级?

  • 底层数据结构:
    • 1.7:是数组+链表;
    • 1.8:底层是数组+链表+红黑树;
  • 默认大小16;
  • 怎么扩容;
    • 创建一个新Entry空数组,是原先的两倍;
    • 遍历原有的数组,把之前的数组重新Hash到新数组中;
  • 什么时候扩容:负载因子是0.75f,比如100,数量到76的时候就扩容;

2.HashMap的长度为什么是2的幂次方?

为了能让HashMap存取高效,尽量减少碰撞,就是要尽量把数据分配均匀,每个链表/红黑树的长度大致相同。

3.HashMap 插入1.7和1.8的区别?

在 Java 1.7 中,HashMap 使用了数组和链表来存储键值对。插入操作大致分为以下几个步骤:

  1. 计算哈希值:首先,使用键的 hashCode() 方法计算其哈希值。
  2. 定位桶:通过哈希值与数组长度减 1 进行位与操作,确定键应该放入哪个桶中。
  3. 处理哈希冲突ÿ
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到