跳至内容
wiki
用户工具
登录
站点工具
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
最近更改
媒体管理器
网站地图
您的足迹:
•
gitlab的安装和使用
分享:技术:hash:hashcode
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== hashcode ====== ===== 概念 ===== hashcode即哈希码,是java的object类中的 <code> public native int hashCode(); </code> 一般在散列集合中用到,如:HashSet、HashMap以及HashTable ===== 作用 ===== 提高查询效率:equals比较俩对象是否相等,但是如果数据量很大,效率会很差,所以先比较hashcode,如果hashcode不相等,equals肯定不相等;如果hashcode相等,再比较equals,这样大大减少比较equals的次数,提高查询效率! ===== hashcode与equals关系 ===== 对于两个对象: - 如果调用equals方法得到的结果为true,则两个对象的hashcode值必定相等 - 如果equals方法得到的结果为false,则两个对象的hashcode值不一定不同 - 如果两个对象的hashcode值不等,则equals方法得到的结果必定为false - 如果两个对象的hashcode值相等,则equals方法得到的结果未知 ===== 比较过程 ===== 在如下HashMap操作过程中 <code> People p1 = new People("Jack", 12); System.out.println(p1.hashCode()); HashMap<People, Integer> hashMap = new HashMap<People, Integer>(); hashMap.put(p1, 1); System.out.println(hashMap.get(new People("Jack", 12))); </code> 比较两次new出来的People对象时候: - 如果不重写hashcode和equals方法,则肯定输出null - 如果只重写equals,不重写hashcode,则也输出null,因为先比较hashcode结果为不相等,hashcode不等equals肯定不等 - 如果按如下方式重写了hashcode和equals,则比较hashcode相等,再比较equals也相等,才能输出1 <code> import java.util.HashMap; import java.util.HashSet; import java.util.Set; class People{ private String name; private int age; public People(String name,int age) { this.name = name; this.age = age; } public void setAge(int age){ this.age = age; } @Override public int hashCode() { return name.hashCode()*37+age; } @Override public boolean equals(Object obj) { return this.name.equals(((People)obj).name) && this.age== ((People)obj).age; } } </code> 注意,如果hashcode值和equals判断与容易改变的属性有关,则同一对象,在不同时候可能产生的hashcode会不一样,比较结果页会不一样。 ===== 参考帖子 ===== http://www.cnblogs.com/dolphin0520/p/3681042.html
分享/技术/hash/hashcode.1454388831.txt.gz
· 最后更改: 2016/02/02 12:53 由
gxx
页面工具
显示页面
修订记录
反向链接
回到顶部