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

最新文章

  1. 【FFmpeg】Windows下FFmpeg编译
  2. 原生andriod浏览器回退后dom(click)事件全体失效问题探究
  3. 用Okhttp框架登录之后的Cookie设置到webView中(转)
  4. winform(数据导出、TreeView的使用)
  5. 网站屏蔽指定ip
  6. spring cloud config 入门
  7. php面向对象设计模式
  8. 查看IIS进程id
  9. hdu_5748_Bellovin(LIS)
  10. Theos tweak MSHookFunction
  11. xcode7,AFN不能使用的问题
  12. es6 常用方法
  13. java-concurrent包
  14. UITabView使用详解
  15. HTTP请求行、请求头、请求体详解(转)
  16. N!
  17. 6.4 操作契约 Operation Contracts
  18. 时间序列大数据平台建设(Time Series Data,简称TSD)
  19. scrapy (四)基本配置
  20. Tensorflow 方法记录

热门文章

  1. Ubuntu桌面显示超大,现在显示不全
  2. 数据分析之scipy常用方法(五)
  3. java正则表达式校验移动电话、固话、邮编的校验
  4. 015.1 Lock接口
  5. Innodb_io_capacity 对于IO稳定性的一些研究
  6. Java(Android)编程思想笔记03:在Android开发中使用MVP模式
  7. fill & stroke
  8. Protocols, Generics, and Existential Containers — Wait What?
  9. burpsuit常用功能
  10. 前端页面 SEO 优化