AVL 树是严格平衡的二叉树,要求任意节点的左右子树高度差不超过 1,这意味着:

  • 插入 / 删除时会触发大量旋转操作(左旋、右旋、双旋),哪怕微小的高度差都要修正;
  • 而 HashMap 的场景是“链表转树”仅发生在链表长度≥8(JDK 1.8)时,本身是低频场景,为了这种低频场景付出高频的平衡开销,完全不划算;
  • 红黑树仅保证黑色高度平衡(不是严格的节点高度平衡),旋转次数远少于 AVL 树,插入 / 删除的平均时间复杂度仍为 O(logn),但实际执行效率更高。

HashMap 的核心是「哈希 + 数组 + 链表 / 树」,树的作用只是解决哈希冲突严重导致链表过长的问题,而非做纯树形存储:

  • 红黑树的查找、插入、删除的时间复杂度都是 O(logn),虽然比 AVL 树的查找略慢(因为高度可能稍高),但增删的开销远低于 AVL 树;
  • 对于 HashMap 来说,“增删”和“查找”的频率几乎持平,红黑树的综合性能更优,毕竟 HashMap 不会只查不改,也不会只改不查。