田三亿,红狼牙鰕虎鱼怎么吃,周雪梅
hashcode:hash码。
特性:两个值,相同的的值生成的hash肯定相同,但是不同的值生成的hash很大程序上会不同。
作用:求hash值效率比引用类型判断是否相等的函数equals更快,所以被用来辅助判断键值对集合的键值是否已经存在。
说明:equals和gethashcode都是object的虚方法,可以被任意类型进行重写。equals来判断两个值是否相等时用到了反射所以慢一点。
在键值对集合如hashtable中,添加键值对时,会分两步检验键值是否已经存在:第一步检查所添加的键的hash值是否存在,不存在则直接添加;如果已经存在的话开始第二步,开始检查键是否存在equals。
namespace justtest { class program { static void main(string[] args) { var t = new hashtable(); t.add(new user { }, 1); t.add(new user { }, 2); } } class user { public override int gethashcode() { console.writeline("gethashcode校验"); return 1; } public override bool equals(object o) { console.writeline("equals校验"); return base.equals(o); } } }
可以进行代码优化:判断对象(或者字符串)是否存在时常常看到直接equals的,但是更好的做法就是先判断两个值的hashcode是否相等,然后再equals
场合:注册时判断用户名是否存在等。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论