hashMap实现原理

78 阅读1分钟

HashMap 基于哈希表实现。

  1. 存储结构:

    • HashMap 使用数组来存储元素,每个数组元素称为桶。每个桶可以存储一个或多个键值对。桶的索引通过哈希函数计算得出。
  2. 哈希函数:

    • 哈希函数用于将键映射到数组索引。在 Java 8 中,HashMap 使用了改进的哈希算法,旨在减小哈希冲突的概率。使用了键的哈希码的高位和低位异或的结果,以及扰动函数,以确保更好的分布。
  3. 链表和红黑树:

    • 在每个桶中,HashMap 使用链表或红黑树来存储键值对。当桶中的元素数量超过一定阈值(默认为8并且数组的长度>64时(否则优先对数组进行扩容)),链表会转换为红黑树,以提高查找、插入和删除的效率。
  4. 扩容:

    • 当 HashMap 的大小达到一定的阈值(负载因子,默认为0.75),HashMap 会进行扩容。扩容涉及重新计算哈希码、重新分配桶的索引,并将元素重新放置到新的桶中。扩容可以保持较低的负载因子,提高查询性能。