HashSet

HashSet基于HashMap来实现的,是一个不允许有重复元素的集合;
HashSet允许有null值;
HashSet是无序的,即不会记录插入的顺序;
HashSet不是线程安全的;
HashSet实现了Set接口

怎么判断两个对象属于同一个对象,首先基于底层HashMap中的
hashcode就是通过hash函数得来的 ,hashcode就是在hash表中有对应的位置

static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
得到hash值,求出所在的索引,如果两个索引在同一位置,则会进行判断内容是否完全一致
public boolean equals(Object obj) {
return (this == obj);
}
如果内容内容不一致,会放到下一个空节点
如果内容一致,则会进行赋值操作

因此当我们用自定义类进行判断时,就要重写 hashcode() ,并且需要重写 equals()

hashcode代表对象的地址说的是对象在hash表中的位置,物理地址说的对象存放在内存中的地址,那么对象如何得到hashcode呢?通过对象的内部地址(也就是物理地址)转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode,所以,hashcode是什么呢?就是在hash表中对应的位置。
(先通过hashcode来比较,如果hashcode相等,那么就用equals方法来比较两个对象是否相等)

1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同
2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

Object类的equals方法是用“”号进行比较,在很多时候,因为号比较的是两个对象的内存地址而不是实际的值,所以不是很符合业务要求。所以很多时候我们需要重写equals方法,去比较对象中每一个成员变量的值是否相等

posted @   微风抚秀发  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示