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 有相同数据 不添加该元素!
- Java 内部是如何判断Map中的两个键是否一样
- java中如何判断两个日期是否是同一周
- 判断两个对象是否一样
- android如何判断两个APK签名是否一样
- java判断两个文件的内容是否完全一样
- java 比较两个无序list中的值是否一样
- JAVA如何判断两个字符串是否相等
- 函数: 判断两个字符串是否完全一样
- 如何判断两个字符串是否是兄弟字符串?
- 如何判断两个时间是否是同一天
- 如何判断两个时间是否是同一天
- 如何判断两个时间是否是同一天
- 如何判断两个时间是否是同一天
- JAVA中的map集合顺序如何与添加顺序一样
- JAVA中的map集合顺序如何与添加顺序一样
- Java中的map集合顺序如何与添加顺序一样
- java 判断两个String 是否是相同字母异序词
- 在java后台判断两个文件是否是同一文件
- Linux下SVN客户端使用教程(全)
- Flask 用Blueprint实现模块化的应用
- 4.2 结构类型——结构
- Leetcode日记(7)
- iOS开发中 常用枚举和常用的一些运算符(易错总结)
- Java 内部是如何判断Map中的两个键是否一样
- nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for propert
- 如何不让DataGridView自动生成列
- CocoaPods 导库时提示“Use the `$(inherited)` flag” or “Remove the build settings from the target”
- node.js 连接外网redis
- 1 pydicom使用体验
- 八皇后算法
- 每天一个 Linux 命令(33):df 命令
- The "Double-Checked Locking is Broken" Declaration