Set接口,HashSet 接口

set 接口简介:
Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。Set接口主要有两个实现类,分别是HashSet和TreeSet。其中,HashSet是根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存取和查找性能。TreeSet则是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。

HashSet 接口简介:
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。

package sk;

import java.util.ArrayList;
/*
 HashSet集合没有索引,不能存储重复元素,元素存取无序
 元素唯一的原理:
 1.根据对象的哈希值(通过调用hashCode方法 计数出来的)来计算存储的位置
 2.判断当前位置上是否有数据
 	2.1  没有:直接存储
 	2.2  有:调用equals()方法来比较一下内部的属性值
 		2.2.1:属性值相同,不存储了
 		2.2.2:属性值不同,以链表结构存储
 
 */
import java.util.HashSet;
import java.util.Iterator;
public class inter {
	public static void main(String[]args) {
		HashSet<String>list=new HashSet<>() ;
		list.add("张三");
		list.add("张三");
		list.add("李四");
		list.add("王五");
		list.add("赵六");
//普通for循环遍历,结果失败,因为HashSet集合当中,没有索引
/*
 	for(int i=0;i<list.size();i++)
{
	list.get(i);
}
*/
//解决循环方式
//1.迭代器的循环方式
//2.增强for方式
for(String s: list)
	System.out.println(s);

}
}



package sk;

public class student /*extends object*/ {
@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		student other = (student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
private String name;
private int age;
public student()
{}
public student( String name,int age)
{this.name=name;
this.age=age;}

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
@Override
public String toString() {
	return "student [name=" + name + ", age=" + age + "]";
}


}





package sk;

import java.util.HashSet;

public class HashSetDen02 {
	public static void main(String[] args){
		// 注意:如果是自定义类型的对象,保存到HashSet集合,必须要重写hashCode()和equals()方法
		// 注意:如果想要保证元素存取顺序,可以使用LinkedHashSet集合LinkedHashSet<student> hs=new LinkedHashSet<>();
		HashSet<student> hs=new HashSet<>();
		student s1 =new student ("张三",23);
		student s2 =new student ("张三",23);
		student s3 =new student ("李四",24);
		student s4 =new student ("王五",25);


		hs.add(s1);
		hs.add(s2);
		hs.add(s3);
		hs.add(s4);
		
		for(student student:hs){
			System.out.println(student);
		}




}
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值