HashSet的使用

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"));//结果:true
set.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("张三")));//true
System.out.println(set.add(new People("张三")));//true
两次分别添加不同的对象。

情景2
HashSet set=new HashSet();
		
People p1=new People("张三");
System.out.println(set.add(p1));//true
System.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));//true
System.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值