Java 内部是如何判断Map中的两个键是否一样

来源:互联网 发布:最后的朋友 知乎 编辑:程序博客网 时间:2024/05/17 09:01

Java 内部是如何判断Map中的两个键是否一样?
为什么会问这个问题呢,源于我在慕课网看到相关的教学视频(http://www.imooc.com/video/5987)中有出现这个判断方法,是关于重写hashcode(),和equals()方法,但是没有说清楚内部原理,让我感觉很懵,就去查资料探索。

内部原理来自:http://blog.csdn.net/love_javc_you/article/details/38305645

大家都知道,在Map和Set不可存在重复元素?
但是对于内部的细节我们并不了解,今天我们就一块来 探讨一下!

1 对于 HashMap HashSet
他们的底层数据结构的实现是:维护了一张 HashTable 。容器中的元素全部存储在Hashtable 中。他们再添加元素的时候,是如何判断是否存在有重复元素的呢? 每一个被添加的元素都有一个 hashCode(哈希值),他们先比较哈希值,是否相同? 不相同的元素,添加进入 HashTable. 如果hashCode相同的话, 再去比较 equals()方法,如果也相同的话,JVM就认为数据已经存在了,就不会添加数据!
这里写图片描述
2 对于 TreeMap TreeSet
他们底层是数据结构的实现是:维护了一棵二叉树。 容器中添加元素的时候,他们有是怎么判断是否有相同元素的?我们都直到 TreeMap TreeSet 她们 都是 有序的存储数据。 为了维护 数据的唯一性。 再存入数据的时候,他们会调用元素中 实现的 Comparable 的 compareTo() 方法(代码1)。 或者 集合本身创建的时候 传入了 迭代器(代码2). 具体的实现是:调用比较方法,返回-1 的时候,添加到左子树,返回1 的时候 添加到 右子树。返回0 有相同数据 不添加该元素!

这里写图片描述

0 0
原创粉丝点击