Java集合框架Set接口

Set
1.Set是Collection的子接口
2.Set中存储的数据是无序的,不可重复的。
不可重复:当Set中添加相同的元素时,后面相同的元素不能添加。
要求:添加进Set中的元素,一定要重写equals()(要去重复)和hashcode()方法

  1. Set中的元素存储:使用哈希算法
    ①当向Set中添加元素时,首先 会调用该对象所在类的hashCode方法
    ,计算对象的哈希值,这个哈希值就决定了对象将来在Set中的存储位置
    ②在通过equals()方法比较两个对象是否相同,如果相同,则后面的对象不能添加
    4.实现类HashSet(主要实现类)
    LinkHashSet
    TreeSet
public class TestSet {
   @Test
	public void testHashSet(){
	   Set set = new HashSet<>();
	   Integer number=new Integer(123);
	   set.add(number);
	   set.add(123);//隐式转化123==number
	   set.add(456);
	   set.add("A");
	   set.add("B");
	   set.add(null);
	   Person p1 = new Person("xiaohu",23);
	   Person p2 = new Person("xiaohu",23);
	  
	   set.add(p1);
	   set.add(p2); 
	   System.out.println(p1.equals(p2));//true person中重写了equals方法
	   System.out.println(p1.hashCode());
	   System.out.println(p2.hashCode());
	   set.remove(123);
	   System.out.println(set);
	   //遍历Set集合
	   //使用迭代器遍历
	   Iterator iterator = set.iterator();
	   while (iterator.hasNext()){
		   System.out.println(iterator.next());
	   }
	  System.out.println("-----------------------");
	  //使用增强for循环
	  for (Object object : set) {
		System.out.println(object);
	}
   }
}

其中的Person类有name,age两个成员变量,且重写了tostring方法,hashCode方法和equals方法
结果:
true
-759498058
-759498058
[null, A, B, 456, Person [name=xiaohu, age=23]]
null
A
B
456
Person [name=xiaohu, age=23]
-----------------------
null
A
B
456
Person [name=xiaohu, age=23]
只有同一类中两个对象要存入Set集合中,比较是否相同,需要在所在类中重写equals和hashCode方法,这样才能保证不重复(因为两个对象的引用地址不同,所以一定会被判断不相等,会输出)
若不重写,就会输出一样的

Person类中不重写hashCode方法和equals方法
则结果为:
false
99550389
1598924227
[null, A, B, 456, Person [name=xiaohu, age=23], Person [name=xiaohu, age=23]]
null
A
B
456
Person [name=xiaohu, age=23]
Person [name=xiaohu, age=23]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值