Java集合篇

面渣逆袭

一、Java集合篇

2024/1/22

  • 哈希冲突的解决方案:

    哈希冲突是指输入两个不同的值,通过同一个哈希函数,得到一个相同的值;而HashMap是通过链表的方式来解决哈希冲突;

    • 链地址法:在冲突的位置拉一个链表,把冲突的元素放进去;

    • 开放定址法: 从冲突的位置上接着往下找,给冲突元素找个空位

  • HashMap的数据结构:

    • jdk8:采用的是:数组+链表+红黑树

    • 数组用于储存数据,链表用于解决哈希冲突,红黑树用于提高查询的效率

  • HashMap扩容机制?何时进行扩容?扩容因子为什么是0.75?

    • 为了减少哈希冲突,当hashmap的元素个数达到临界值时,就触发扩容机制

    • 临界值=默认容量*默认扩容因子

    • hashmap初始默认容量为16,初始化容量是2的次幂,扩容之后的长度是之前的2倍,新的容量也是2的次幂,所以扩容机制是随着元素的增加,HashMap通过增大内部数组的容量和重新计算哈希值来保持高效的访问速度。同时,JDK8的优化使得在链表较长时能够通过红黑树提高查询效率。

    • 扩容因子是0.75的原因(扩容因子决定元素的个数达到多少时,方进行扩容)

      • 出于对查询时间和存储空间成本两者之间的平衡考虑

      • 如果扩容因子设置较大时,元素越多,而空位较少的时候才扩容,那么发生查询数据的时间就增加,增大了哈希冲突的概率。

      • 如果扩容因子设置较小,元素越少,而空位较多的时候才扩容,虽然发生哈希冲突的概率降低,查找时间成本降低,但是空间成本增加了,需要更多的空间去存储元素。

posted @   捞月亮的渔夫  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示