集合底层实现原理

本文深入探讨了ArrayList, LinkedList及HashSet三种数据结构的底层实现原理。ArrayList基于数组实现,通过动态调整数组大小来适应数据变化;LinkedList利用链表特性实现动态长度;HashSet结合数组与链表,通过哈希值定位元素,解决哈希冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList 

底层实现原理是数组。

因为数组是定长的,所以在最初的时候建立了一个初始化长度默认16的基础数组,加素因子默认是0.75。可存储长度为16*0.75=12。

当存储数据达到12的时候,数组会内部操作建一个更长的数组,将现在数组的数据拷入新的数组。

所以就完成了动态添加且不定长度的原因。

LinkedList

底层实现原理是链表

链表本身可以自动增长的,所以是利用链表的特性直接完成动态长度的。

Hashset

底层实现是链表和数组的结合体(对应关系是Map键值对的关系)。

最初是数组的存储的方式以及增长方式。但是数组中存的是哈希值。

当哈希值相同的时候就按照链表的方式存储在此哈希值数组的下方。

如假设String“abc” 和String“efg”哈希值相同。

存“adc”:1,调用哈希值 2,在数组中找有没有相同的哈希值,如果没有,就将此哈希值添加到数组中(map,键值对关系找到对象)。

存“efg”:1,调用哈希值 2,在数组中找到相同的哈希值,3,用equals判断两个值是否相等,如果相等则重复,不添加。如果不相等,则以链表的方式储存(桶储存)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值