HashMap 底层结构和扩容过程

HashMap 底层结构和扩容过程

HashMap 是 Java 后端最常用的数据结构之一。它适合通过 key 快速找到 value,平均情况下查询、插入接近 O(1)。真正理解 HashMap,要抓住三个点:数组、链表/红黑树、扩容。

基本使用

Map<Long, String> userMap = new HashMap<>();
userMap.put(1L, "小乐");
userMap.put(2L, "张三");
System.out.println(userMap.get(1L));

HashMap 会先根据 key 的 hash 值定位数组下标。如果多个 key 落在同一个位置,就会形成冲突,Java 8 以后冲突链较长时会转成红黑树。

扩容为什么要注意

默认负载因子是 0.75。元素数量超过阈值时,HashMap 会扩容,数组容量通常变成原来的 2 倍。扩容需要重新分布元素,所以如果你大概知道数据量,建议初始化容量:

Map<Long, String> userMap = new HashMap<>(1024);

常见坑

  • HashMap 不是线程安全的,多线程写入要用 ConcurrentHashMap。
  • 自定义对象作为 key 时,要正确重写 equals 和 hashCode。
  • 不要在遍历 Map 时直接修改结构,必要时用迭代器或收集后再处理。

   转载规则


《HashMap 底层结构和扩容过程》 小乐 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录