Hashmap如何实现key的唯一性

本文探讨了Map和Set在Java中的实现原理,包括HashMap、HashSet、TreeMap和TreeSet等容器如何确保元素的唯一性及有序性。通过对比不同容器的内部实现机制,如哈希表和二叉树,解释了它们如何处理重复元素。

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

Map和Set不可存在重复元素

1 对于 HashMap  HashSet  的实现是:

维护了一张  HashTable 。容器中的元素全部存储在Hashtable 中,每次添加元素都会先判断是否有重复的元素,hashcode()方法进行比较,若一样再equals()方法比较,他们的底层数据结构如果也相同的话,JVM就认为数据已经存在了,就不会添加数据!

2 对于 TreeMap  TreeSet

他们底层是数据结构的实现是:维护了一棵二叉树。 容器中添加元素的时候,他们有是怎么判断是否有相同元素的?我们都直到 TreeMap TreeSet  她们 都是 有序的存储数据。 为了维护 数据的唯一性。 再存入数据的时候,他们会调用元素中 实现的 Comparable 的 compareTo()  方法(代码1)。 或者 集合本身创建的时候 传入了 迭代器(代码2).  具体的实现是:调用比较方法,返回-1  的时候,添加到左子树,返回1 的时候 添加到 右子树。返回0 有相同数据 不添加该元素!

Map和Set都是不重复的,对于带tree的还有顺序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值