Java常用Collections集合实现原理

本文详细介绍了Java中常用的Collections集合,包括HashMap的结构和实现原理,如Hash值计算、resize过程及Fail-Fast机制;HashSet依赖于HashMap实现,强调对象需重写equals()和hashCode();HashTable与HashMap类似但线程安全;LinkedHashMap和LinkedHashSet提供了有序存储;ArrayList和LinkedList分别基于数组和链表,ArrayList在扩容时会拷贝原数组,而LinkedList适用于频繁插入删除操作。
摘要由CSDN通过智能技术生成

Java常用Collections集合实现原理

一、HashMap集合
1、HashMap的结构:底层是一个数组,每个数组元素是一个链表,实现了Map接口(实现Map接口的集合允许有重复值),key和value都可以为空
2、方法实现原理:当HashMap.put时,先根据key计算Hash值,然后根据hash值找到这个元素在数组中的位置,如果数组中该位置已经有元素了,那么先遍历该位置的链表,如果链表中key相同,则将values进行替换,如果key不相同,则加入到该条链表的头部,最先加入的在尾部;如果数组中该位置没有元素,则将该元素放入到数组的该位置。当HashMap.get时,根据key计算hash值,然后根据hash值找到这个元素在数组中的位置,然后通过key的equals方法找到对应的元素即可。
3、当数组的大小是2的n次幂的时候,元素分布比较均匀,分析算法得出,根据hash值计算数组位置的算法
hash & (table.length - 1)
4、HashMap的resize原理:当HashMap中元素个数达到一定值Max时就需要扩充数组的大小,扩大一倍,此时需要重新计算每个元素的位置,因此扩充容量是一个非常消耗性能的过程,最好在初始化的时候能够预测Hashmap的大小并指定数组大小。这个Max值的计算方法:数组容量 * 加载因子;加载因子默认为0.75f,数组容量默认16,在初始化HashMap时两个参数可以进行设置;
5、Fail-Fast机制:HashMap操作是异步的,因此在不同线程中操作不安

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值