博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashSet的使用
阅读量:6981 次
发布时间:2019-06-27

本文共 1322 字,大约阅读时间需要 4 分钟。

hot3.png

1.Set中元素是无序的
HashSet set=new HashSet();set.add("a");set.add("b");set.add("c");set.add("d");System.out.println(set);//结果:[d,b,c,a]
2.Set不允许重复
情景0
HashSet set=new HashSet();System.out.println(set.add("a"));//结果:trueset.add("b");set.add("c");set.add("d");System.out.println(set.add("a"));//结果:false
两次添加"a"
情景1
HashSet set=new HashSet();System.out.println(set.add(new People("张三")));//trueSystem.out.println(set.add(new People("张三")));//true
两次分别添加不同的对象。
情景2
HashSet set=new HashSet();		People p1=new People("张三");System.out.println(set.add(p1));//trueSystem.out.println(set.add(p1));//false
两次都是添加p1
情景3
HashSet set=new HashSet();		String s1=new String("a");String s2=new String("a");System.out.println(set.add(s1));//trueSystem.out.println(set.add(s2));//false

两次分别添加s1,s2(显然,s1和s2是不同的对象)。

注意:此时第二次添加并不成功。
HashSet添加元素的过程
①HashCode
当HashSet在添加元素时,会先调用hashCode()方法,判断即将加入的元素的hashCode是否与集合中的元素有相同的,如果没有,则允许添加该元素。如果有相同的,则继续调用equals()方法,如果equals()方法返回true,则表示对象已经加入过了,不允许再添加了。否则,如果equels方法返回false,则允许添加新元素。
②equals
对于两个对象来说,如果使用equals返回true, 则这两个对象的hashcode一定相同。
对于两个对象来说,如果使用equals返回false,则这两个对象的hashcode不一定不相同(可以相同或者不同)。如果不同,可以提高性能。
对于Object类来说,不同的Object对象的hashcode值是不同的(hashCode值表示对象的地址)
String类的hashCode()方法重写了Object类的hashCode()方法,只要两个String对象的内容相同则认为hashCode相同,所以情景3比较特殊。

转载于:https://my.oschina.net/javandroid/blog/878218

你可能感兴趣的文章
Android组件化和插件化开发
查看>>
远程更改ESXi主机IP
查看>>
【java】 虹软ArcFace 2.0 人脸信息识别(年龄、性别)
查看>>
Log4j 配置文件(log4j.properties)的所在路径问题(转)
查看>>
Java集合--Map总结
查看>>
【转】Netty系列之Netty 服务端创建
查看>>
了解自我
查看>>
Agilent RF fundamentals (7) Oscillator characterization
查看>>
页面超时处理
查看>>
前五章的综合(查漏补缺续)一个字一个字读,便于您的理解程度
查看>>
面向对象的基本认知
查看>>
List创建,添加,读取,遍历,修改,移除等方法
查看>>
Maven构建springMVC+spring+MyBatis项目
查看>>
猴子选大王
查看>>
3249 搭积木
查看>>
POJ2749:Building roads——题解
查看>>
[SpringMVC]定义多个前缀映射的问题
查看>>
高中时的口头禅
查看>>
C++ 虚函数表解析
查看>>
[SCOI2009]windy数
查看>>