Java 容器(HashMap、HashSet、LinkedList、ArrayList)原理与对比

本文详细介绍了Java中的四种容器:HashMap、Hashtable、HashSet和ArrayList、LinkedList。HashMap基于哈希原理,提供高效查找、插入和删除操作,但线程不安全。Hashtable是线程安全的HashMap,而HashSet依赖HashMap实现,不允许重复元素。ArrayList是动态数组,查询速度快,增删慢,而LinkedList基于双向链表,查询慢但增删快。

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

HashMap

HashMap是基于Hashing(哈希)原理,通过put()和get()方法来存储和获取对象。

HashMap的来源:

数组的特点是:寻址容易,插入和删除困难;

而链表的特点是:寻址困难,插入和删除容易。

那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?HashMap应运而生。HashMap的实现方式如下图:

左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表(桶)的头,当然这个链表可能为空,也可能元素很多。

1、利用key的hashCode重新hash计算出当前对象的元素在数组中的下标

2、存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同(通过equals),则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中

3、获取时,直接找到hash值对应的下标,在进一步判断key是否相同(通过equals),从而找到对应值。

优点:不论哈希表中有多少数据,查找、插入、删除(有时包括删除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。

缺点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值