162_集合_Set_HashSet集合详解

本文深入探讨了HashSet的工作原理,包括其内部实现机制、哈希表结构以及如何存储元素。此外,还通过具体示例展示了HashSet在实际编程中的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package settest;

import java.util.HashSet;
import java.util.Set;

/*
 * Set集合:HashSet
 * 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构。
 * 2.哈希表又叫做散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链表
 *   都有一个独一无二的hash值,代表数组的下标。在某个单向链表中的每一个节点上的hash值是相等的。
 *   hash值实际上是key调用hashCode方法,在通过“hash function”转换成的值。
 * 3.如何向哈希表中添加元素:
 *   先调用被存储的key的hashCode方法,经过某个算法得出hash值,如果在这个哈希表中不存在这个hash值,
 *   则直接加入元素。如果该hash值已经存在,继续调用key之间的equals方法,如果equals方法返回false,
 *   则将改元素添加。如果equals方法返回true,则放弃添加该元素。
 * 4.HashSet其实是HashMap中的key部分,HashSet有什么特点,HashMap中key应该具有相同的特点。
 * 5.HashMap和HashSet初始化容量都是16,默认加载因子是0.75. 
 * */
public class Test01 {

	public static void main(String[] args) {
		Set s = new HashSet();
        Employee e1 =new Employee("1000", "TOM");
        Employee e2 =new Employee("1000", "TOM");
        Employee e3 =new Employee("2000", "SMITH");
        Employee e4 =new Employee("2001", "COOK");
        Employee e5 =new Employee("3000", "KING");
        Employee e6 =new Employee("3001", "SUN");
        
        s.add(e1);
        s.add(e2);
        s.add(e3);
        s.add(e4);
        s.add(e5);
        s.add(e6);
        
        System.out.println(s.size());
	}

}

 class Employee{
	String id;
	String name;
	public Employee(String id, String name) {
		this.id = id;
		this.name = name;
	}
	public boolean equals(Object o){
		if(o==this) return true;
		if(o instanceof Employee){
			Employee e =(Employee)o;
			if (e.id.equals(this.id) && e.name.equals(this.name)){
				return true;
			}
		}
		return false;
	}
	//以y员工编号判断哈希值是否重复
	public int hashCode(){
		return this.id.hashCode();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值