Java中的Set集合接口实现插入对象不重复的原理
当使用set集合时,是需要重写set相关类的hashCode和equals方法的。
在java的集合中,判断两个对象是否相等的规则是:
1)、判断两个对象的hashCode是否相等 。
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2)
(这一点只是为了提高存储效率而要求的,其实理论上没有也可以,但如果没有,实际使用时效率会大大降低,所以我们这里将其做为必需的。后面会重点讲到这个问题。)
2)、判断两个对象用equals运算是否相等 。
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)
对于一般类的对象(除String等封装类型对象外):
若普通类没有重写hashcode()和equals()方法,,那么其对象在比较时,是继承的object类中的hashcode()方法,object类中的hashcode()方法是一个本地方法,对该方法的返回值进行比较时,比较的是对象的地址(引用地址),使用new方法创建内容相同的对象,两次生成的当然是不同的对象。除非重写hashcode()方法。在object类中定义的equals()方法也是对对象地址的比较。一句话总结:若不重写普通类的hashcode()和equals()方法,在Set集合中对象引用地址不一样,对象即不重复。
对于String等对象(String、Integer、Double····等等):
由于这些封装类本身已经重写了hashcode()方法,并且重写的方法的返回值跟对象的内容相关,而不是跟引用地址相关。这些封装类中的equals()方法同样进行了重写,比较的是对象的内容,而非引用地址。一句话总结:String等类的对象在集合中均比较他们的内容,内容相同则覆盖已存在的对象。
Java中的Set集合接口实现插入对象不重复的原理相关推荐
- JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
JDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合类.本文将就Java Collections Fram ...
- java中如何上送list集合_如何使用java中的list集合
如何使用java中的list集合 发布时间:2020-06-26 14:45:11 来源:亿速云 阅读:88 作者:Leah 如何使用java中的list集合?针对这个问题,这篇文章详细介绍了相对应的 ...
- Java中Comparable和Comparator接口区别分析
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...
- java comparator相等_详解Java中Comparable和Comparator接口的区别
详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...
- Java中如何克隆集合——ArrayList和HashSet深拷贝
2019独角兽企业重金招聘Python工程师标准>>> 编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法 ...
- java 集合初始化_6种方法初始化JAVA中的list集合
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List languages = ne ...
- Java中遍历Set集合的三种方法
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- JAVA中的Map集合
JAVA中的Map集合 1.Map简介 java.util.map接口 1.Map称为查找表,该数据结构的样子是一个"多行两列"的表格,左列为key,右列为value,Map总是根 ...
- 高薪程序员面试题精讲系列31之你熟悉Java中的哪些集合?
一. 面试题及剖析 1. 今日面试题 Java中的集合你了解吗? 你熟悉Java中的哪些集合? 集合的顶级接口是哪个,集合的具体实现类有哪些? ...... 2. 题目剖析 我们在进行Java开发.代 ...
最新文章
- 在新基建风口上,华为“鲲鹏”这次要翱翔了
- python实现字符串中中文在前,数字在后且按从小到大排序
- c++找不到标识符_沪C转沪牌流程攻略大全
- 合并K个排序链表—leetcode23
- clojure JavaFX程序uberjar打包卡死的问题
- UVA - 11732 strcmp() Anyone?左兄弟右儿子trie
- canvas 平滑运动_什么是电视上的运动平滑?人们为什么讨厌它?
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...
- Service Mesh 在华为公有云的实践
- 黑客必须了解的网络知识
- 基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间
- Linux虚拟机挂载共享文件夹
- Autoware(2)—加载地图数据
- CSS Expression用法总结
- python自学行吗-python自学行吗?给编程初学者零基础入门的建议
- CImage 对话框初始化时候显示透明 PNG
- 从食品质检员到代码工程师,大哥你就这样跳槽进了阿里巴巴?
- 转: DH密钥交换和ECDH原理
- html5游戏网页代码大全,HTML网页代码大全
- 精益技术简历之道——改善技术简历的47条原则
热门文章
- AMD 和 Intel 之战:CPU 哪家强?
- 任正非:5G独立组网全世界只有华为一家做好了 我们在等待高通进步
- AI2:预计2030年中国AI研究或领跑全球
- 人工智能的价值地图:AI产业增强革命的模式与路径
- Windows 11 预览版泄露!有 macOS 那味儿了......
- 原来 Excel 只需三步就可以给证件照换底色!
- OMG!Semaphore里面居然有这么一个大坑!
- VisualSvn Server介绍
- Flask入门 表单Flask-wtf form原生与Bootstrap渲染(七)
- Bootstrap-下拉菜单