得物Android面试题及参考答案

简单介绍一下 HashMap 的原理(包括存储结构、哈希函数、碰撞处理等)

HashMap 是 Java 中常用的哈希表实现,基于哈希原理存储键值对。其核心原理涉及存储结构、哈希函数和碰撞处理三个关键部分。

存储结构:HashMap 采用数组 + 链表 + 红黑树的复合结构。数组是 HashMap 的主体,每个元素称为桶(Bucket)。当发生哈希冲突时,相同哈希值的元素会以链表形式存储在桶中。当链表长度超过阈值(默认 8)且数组长度达到 64 时,链表会转换为红黑树,以提高查询效率。

哈希函数:HashMap 通过哈希函数将键的 hashCode 映射到数组索引。为了减少哈希冲突,HashMap 对键的 hashCode 进行二次哈希处理,通过(h = key.hashCode()) ^ (h >>> 16)将高位信息与低位信息混合,降低哈希碰撞概率。然后通过(n - 1) & hash计算数组索引,其中 n 为数组长度。

碰撞处理:当两个不同的键计算出相同的哈希值时,发生哈希碰撞。HashMap 采用链地址法处理碰撞,将冲突的元素放入同一桶的链表中。为避免链表过长导致性

你可能感兴趣的:(android面经,安卓面试,双亲委托,kotlin,okhttp,双重检验,设计模式)