面试:HashSet怎么判断重复
HashSet是基于HashMap实现的,元素的值存储在key上,value的值所有元素都一样,都是这个 private static final Object PRESENT = new Object();
HashSet集合不能存储重复的元素,那么元素之间是否重复,HashSet是根据什么机制去判断的呢?
HashSet在添加一个元素时(比如此时添加的是”a”这个元素),都会将该元素与set中所遍历到的每个元素作比较,比较的过程是这样的:先用该元素的hashCode值与遍历到的每个元素的hashCode作比较,如果hashCode不相等,则直接添加;若hashCode的值一样,则继续用该元素的equals()方法比较(是被添加的equals()方法,与之比较的元素作为参数),如果equals()方法得到的值是一样的,不再添加,如果equals()的值是不一样的,就会将该对象添加到其他内存地址(重新计算出不一样的hashCode)。
equals和hashCode
要明确:equals()相等的两个对象,hashcode()一定相等 ,equals()方法不相等的两个对象,hashCode()有可能相等。
Object类中:hashcode方法返回的是对象的hash地址,是个native方法,equals方法比较的是对象的地址
换句话说:当我们重写一个对象的equals方法,就必须重写他的hashCode方法,不过不重写他的hashCode方法的话,Object对象中的hashCode方法始终返回的是一个对象的hash地址,而这个地址是永远不相等的。
为什么重写equals方法一定要重写hashCode方法
https://blog.csdn.net/mp252119282/article/details/83275549
最新文章
- 【FFmpeg】Windows下FFmpeg编译
- 原生andriod浏览器回退后dom(click)事件全体失效问题探究
- 用Okhttp框架登录之后的Cookie设置到webView中(转)
- winform(数据导出、TreeView的使用)
- 网站屏蔽指定ip
- spring cloud config 入门
- php面向对象设计模式
- 查看IIS进程id
- hdu_5748_Bellovin(LIS)
- Theos tweak MSHookFunction
- xcode7,AFN不能使用的问题
- es6 常用方法
- java-concurrent包
- UITabView使用详解
- HTTP请求行、请求头、请求体详解(转)
- N!
- 6.4 操作契约 Operation Contracts
- 时间序列大数据平台建设(Time Series Data,简称TSD)
- scrapy (四)基本配置
- Tensorflow 方法记录
热门文章
- Ubuntu桌面显示超大,现在显示不全
- 数据分析之scipy常用方法(五)
- java正则表达式校验移动电话、固话、邮编的校验
- 015.1 Lock接口
- Innodb_io_capacity 对于IO稳定性的一些研究
- Java(Android)编程思想笔记03:在Android开发中使用MVP模式
- fill &; stroke
- Protocols, Generics, and Existential Containers — Wait What?
- burpsuit常用功能
- 前端页面 SEO 优化