HashSet集合

HashSet是Set接口的一个实现类,储存特点是无序不重复

储存原理如下:

可以看出,储存元素时,要用HashSet方法 和equals方法,这就是为什么该类的元素特点是无序不重复。

看下面一个例子:

import java.util.*;
class Student{
	private int number;
	private String name;
//	构造方法
	public Student() {	
	}
	public Student(int number,String name) {
		this.number=number;
		this.name=name;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String toString() {
		return number+":"+name;
	}
}
public class test3 {
	public static void main(String[] args) {
		HashSet hs=new HashSet();
		Student stu1=new Student(2,"Rose");
		Student stu2=new Student(1,"Jack");
		Student stu3=new Student(2,"Rose");
		hs.add(stu1);
		hs.add(stu2);
		hs.add(stu3);
		System.out.println(hs.toString());
	}
}

运行结果:

 不难发现,如果要保证HashSet正常工作,那么在存入对象时,我们就要重写Object类中的HashCode()方法和equals()方法,但是,对于String对象来说,java就已经重写了HashCode()方法和equals()方法。要重写,那我们先了解一下Object中的equals()方法,理解了其中的原理,我们就能更好的重写我们需要的方法

Object类中的equals()方法

 那么接下来,就是对于上面代码的改进:

import java.util.*;
class Student{
	private int number;
	private String name;
//	构造方法
	public Student() {
		
	}
	public Student(int number,String name) {
		this.number=number;
		this.name=name;
	}
//	重写toString方法
	public String toString() {
		return number+":"+name;
	}
//	重写hashCode和equals方法
	public int hashCode() {
		return name.hashCode();
	}
	public boolean equals(Object obj) {
		if(this==obj) {   //比较s1和s2地址是不相同,相同为true
			return true;
		}
		if(!(obj instanceof Student)) {  //比较是不是obj是不是Student的实例,不是的返回false
			return false;
			
		}
		Student stu=(Student) obj;   //类型强制转换
		boolean b=this.name.equals(stu.name); //调用equals进行比较
		return b;
	}

	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

public class test4 {
	
	public static void main(String[] args) {
		HashSet hs=new HashSet();
		Student stu1=new Student(2,"Rose");
		Student stu2=new Student(1,"Jack");
		Student stu3=new Student(2,"Rose");
		hs.add(stu1);
		hs.add(stu2);
		hs.add(stu3);
		System.out.println(hs.toString());
	}

}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值