HashSet

HashSet是Set接口胡一个实现类,它所存储的元素是不重复的,并且元素都是无序的.
HashSet集合之所以能确保不出现重复的元素,是因为当调用HashSet集合的add方法时首先调用当前存入对象的hashCode方法获得对象的哈希值,然后根据对象的哈希值计算出一个存储位置如果该位置上没有元素,则直接将元素存入,如果存在元素,则会调用equals方法(比较对象是否相等)让当前存入的元素依次和该位置上的元素比较。返回false则存入,true则舍弃

public class Test {

	public static void main(String[] args) {
      HashSet<Student> hs=new HashSet<Student>();
      Student s1=new Student("1","Jack");
      Student s2=new Student("2", "Rose");
      Student s3=new Student("2", "Rose");
      hs.add(s1);
      hs.add(s2);
      hs.add(s3);
      System.out.println(hs);
      /*******************hashCode******************/
      System.out.println(s1.hashCode());
      System.out.println(s2.hashCode());
      System.out.println(s3.hashCode());
      /*****************equals********************/
      System.out.println("s2是否等于s3:"+s2.equals(s3));
	}
}
class Student{
	String id;
	String name;
	public Student() {
		super();
	}
	public Student(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
        //重写toString方法
	public String toString() {
		return this.id+":"+this.name;
	}
}

在这里插入图片描述
之所以出现重复元素是在定义Student类时没有重写hashCode和equals方法

public class Test {

	public static void main(String[] args) {
		HashSet<Student> hs = new HashSet<Student>();
		Student s1 = new Student("1", "Jack");
		Student s2 = new Student("2", "Rose");
		Student s3 = new Student("2", "Rose");
		hs.add(s1);
		hs.add(s2);
		hs.add(s3);
		System.out.println(hs);
		/******************* hashCode ******************/
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s3.hashCode());
		/***************** equals ********************/
		System.out.println("s2是否等于s3:" + s2.equals(s3));
	}
}

class Student {
	String id;
	String name;

	public Student() {
		super();
	}

	public Student(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	// 重写toString方法
	public String toString() {
		return this.id + ":" + this.name;
	}

	// 重写hashCode方法
	public int hashCode() {
		return this.id.hashCode();
	}

	// 重写equals方法
	public boolean equals(Object obj) {
		if (this == obj) { // 判断是否是同一个对象
			return true;
		}
		if (!(obj instanceof Student)) { // 如果不是Student类型,返回false
			return false;
		}
		Student student = (Student) obj;
		boolean b = this.id.equals(student.id);
		return b;
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值