equals和hashcode重写的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public static void main(String[] args) { Set<Test> set = new HashSet<>(); Test t1 = new Test( "aaa" ); Test t2 = new Test( "aaa" ); set.add(t1); set.add(t2); System.out.println(set.size()); //我们对于equals方法已经很熟了,这里就不说了 //t1.equals(t2) == true //如果Test没有重写hashcode方法 set.size() -> 2 //如果Test重写了hashcode方法 set.size() -> 1 //原因: //在集合中,判断两个对象是否相等的规则是: //第一步,如果hashCode()相等,则查看第二步,否则不相等; //第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等 //hashcode源码分析:String类的 //实际上它是遍历了字符串的里面的所有字符,根据每个字符的ASCII码值进行遍历计算,关于那个固定值为什么是31,应该取这个值效率较高,可重复性较低 /*public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h;*/ //equals源码分析:string类 //这个相信大家都看过,遍历字符串里的所有字符,然后逐一进行比较,只要有不相同的就return false //所以 //equals相同的两个对象,其hashcode码一定相同,因为hashcode码就是根据值去算的 //两个对象的hashcode码相同,可能存在偶然的情况,字符串不同,算出的hashcode码一样 } |
关于http协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!