• HashMap 哈希碰撞、负载因子、插入方式、扩容倍数


    HashMap 怎么解决的哈希碰撞问题?

    主要采用了链地址法。具体来说:

    1. 每个哈希桶不仅存储一个键-值对,而是存储一个链表或树结构。这样,具有相同哈希值的键-值对可以被存储在同一个哈希桶中,并通过链表或树结构来解决碰撞。
    2. 当哈希碰撞发生时,新的键-值对会被添加到哈希桶的链表或树的末尾。这确保了相同哈希值的键-值对都能被正确存储和检索。
    3. 如果链表的长度超过了某个阈值,Java 8 中的 HashMap 会将链表转化为红黑树,以提高检索性能。这是 Java 8 的一个优化,它降低了最坏情况下的时间复杂度。

    这个改进使 Java 8 中的 HashMap 在处理哈希碰撞时更加健壮,尤其是在哈希表的负载因子(load factor)较高的情况下。哈希表的负载因子是键-值对数量与桶数量的比值,当负载因子过高时,哈希碰撞可能会频繁发生,导致性能下降。通过将链表转化为红黑树,Java 8 的 HashMap 能够更好地处理这种情况。

    HashMap的负载因子默认是多少?默认初始容量?

    HashMap 的默认负载因子是 0.75,默认的初始容量为 16。初始容量是指 HashMap 在创建时的初始桶数量。负载因子用于确定何时触发扩容操作。

    负载因子 0.75 意味着当 HashMap 中的元素数量达到当前容量的 75% 时,HashMap 将自动进行扩容操作,以保持性能。这是一个平衡的值,通常在性能和内存占用之间提供了合理的折中。

    HashMap 的容量总是2的幂,这有助于哈希值与桶的索引之间的关系更加高效。因此

  • 相关阅读:
    设计模式:迭代器模式
    常见的Elasticsearch操作
    LeetCode每日温度
    使用sipParseArgs/sipBuildResult进行python/C++对象的转换
    uniapp解决h5跨域问题
    js 深入理解原型(prototype)及如何创建对象
    java基础详解1----package引入&CLASSPATH
    十年架构五年生活-09 五年之约如期而至
    异地局域网对接:异地组网原理与实操
    【C++】60 alignas 和[nodiscard]
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/134030811