关于Set集合去重

上次说了List集合的去重,这次来说说Set集合的去重

public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add("a");
		hs.add("b");
		hs.add("c");
		hs.add("a");
		hs.add("a");
		for (Object obj : hs) {
			System.out.println(obj);
		}
	}

在这里插入图片描述
从中可以看出HashSet中是有去重功能的,那我们来试试自定义对象,看看能不能去重。

package com.liang.set;

import java.util.HashSet;
public class SetRemo {
	public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add(new Student("a","12"));
		hs.add(new Student("b", "12"));
		hs.add(new Student("c", "13"));
		hs.add(new Student("c","12"));
		hs.add(new Student("a","12"));
		for (Object obj : hs) {
			if(obj instanceof Student) {
				Student stu=(Student)obj;
				System.out.println(stu.getName()+stu.getAge());
			}
		}
	}
}
class Student{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Student(String name, String age) {

		this.name = name;
		this.age = age;
	}
	public Student() {
	
	}
	
}

结果如下
在这里插入图片描述
HashSet元素是自定义对象时,它的去重功能失效了,那怎么才能实现去重呢?
下面让我们来看看代码该怎么写

package com.liang.set;

import java.util.HashSet;




public class SetRemo {

	public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add(new Student("a","12"));
		hs.add(new Student("b", "12"));
		hs.add(new Student("c", "13"));
		hs.add(new Student("c","12"));
		hs.add(new Student("a","12"));
		
		
		for (Object obj : hs) {
			if(obj instanceof Student) {
				Student stu=(Student)obj;
				System.out.println(stu.getName()+stu.getAge());
			}
		}
		
	}
}
class Student{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Student(String name, String age) {

		this.name = name;
		this.age = age;
	}
	public Student() {
	
	}
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return this.getName().hashCode()+this.getAge().hashCode();
	}
	@Override
	public boolean equals(Object obj) {
			if(obj instanceof Student) {
				Student s=(Student)obj;
				return this.getName().equals(s.getName()) && this.getAge().equals(s.getAge());
			}
		return false;
	}
}

运行结果如下
在这里插入图片描述
去重完成了!
这是为什么呢?原因是HashSet去重时自动调用hashCode()方法,这个方法会返回一个哈希值,只有当这个哈希值相等时才会调用equals()方法进行去重.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值