哈希值和HashSet集合存储数据的结构
哈希值
哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址)
在object类有一个方法,可以获取对象的哈希值
int hashcode()返回该对象的哈希码值。
hashcode方法的源码:
public native int hashcode();
native:代表该方法调用的是本地操作系统的方法
public static void main(String[] args) { // Person类继承了object类,所以可以使用object类的hashcode方法 Person p1 = new Person(); int h1 = p1.hashCode(); System.out.println(h1);//1967205423 Person p2 = new Person(); int h2 = p2.hashCode(); System.out.println(h2);//42121758 /* tostring方法的源码: return getClass( ).getName( ) +“@”+ Integer.toHexString(hashCode()); */ System.out.println(p1); System.out.println(p2); String s1 = new String( "abc") ; String s2 = new String("abc"); System.out.println(s1.hashCode()); System.out.println("重地".hashCode()) ; System.out.println("通话".hashCode()); }
class R{ int count; public R(int count){ this.count = count; } public String toString(){ return "R[count:"+count+"]"; } public boolean equals(Object obj){ if(this == obj) return true; if(obj != null && obj.getClass() == R.class){ R r = (R)obj; return this.count == r.count; } return false; } public int hashCode(){ return this.count; } } public class HashSetTest2{ public static void main(String[] args){ HashSet hs = new HashSet(); hs.add(new R(5)); hs.add(new R(-3)); hs.add(new R(9)); hs.add(new R(-2)); //打印HashSet集合,集合元素没有重复 System.out.println(hs); //取出第一个元素 Iterator it = hs.iterator(); R first = (R)it.next(); //为第一个元素的count实力变量赋值 first.count = -3; //再次输出HashSet集合,集合元素有重复元素 System.out.println(hs); //删除count为-3的R对象 hs.remove(new R(-3)); //删除的是原本定义为-3的对象,而不是后面改动的对象。因为HashSet根据hashCode值定位。 System.out.println(hs); System.out.println("hs是否包含count为-3的对象?"+hs.contains(new R(-3))); //结果为false,因为被删除了 System.out.println("hs是否包含count为-2的R对象?"+hs.contains(new R(-2))); //结果为false,因为值被改动了 } }
HashSet集合存储数据的结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix