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
    评论
ArrayList和HashSet都是Java中常用的集合类。ArrayList是一个动态数组,可以根据需要自动扩展容量,而HashSet是一个基于哈希表的集合,它不允许重复元素,可以用于去重。下面是它们的一些特点和常用方法: ArrayList: - 可以存储重复元素,可以根据下标访问元素。 - 添加元素使用add()方法,删除元素使用remove()方法,获取元素使用get()方法。 - 可以使用for循环或者迭代器遍历元素。 - 底层实现是一个数组,当数组容量不足时会自动扩容。 HashSet: - 不允许存储重复元素,可以用于去重。 - 添加元素使用add()方法,删除元素使用remove()方法,查询元素使用contains()方法。 - 可以使用for循环或者迭代器遍历元素。 - 底层实现是一个哈希表,当元素数量过多时会自动扩容。 下面是一个示例代码,演示了如何使用ArrayList和HashSet: ```java import java.util.ArrayList; import java.util.HashSet; public class Main { public static void main(String[] args) { // 创建一个ArrayList ArrayList<String> arrayList = new ArrayList<>(); // 添加元素 arrayList.add("apple"); arrayList.add("banana"); arrayList.add("orange"); // 遍历元素 for (String fruit : arrayList) { System.out.println(fruit); } // 创建一个HashSet HashSet<String> hashSet = new HashSet<>(); // 添加元素 hashSet.add("apple"); hashSet.add("banana"); hashSet.add("orange"); hashSet.add("apple"); // 添加重复元素 // 遍历元素 for (String fruit : hashSet) { System.out.println(fruit); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值