hashcode的简单简析
来源:互联网 发布:仿苹果软件 编辑:程序博客网 时间:2024/05/16 09:23
这两天突然遇到了一个很久都没有遇到的问题,谈到equals 和hashCode的关系,大概整理一下,以备学习从代码中可以看到对于String的hashCode返回的是第一个字任加上所有字符的ASCII*31相加.Integer 返回的是当前值.而对于equals方法,两者都比较的是内容.
1.equals 和 hashCode 本身都是Object的方法,equals.用来比较两个变量的值.hashCode返回的是变量存储的物理地址的标示(可姑且认为是物理地址,其实不是)
2.基本数据类型(及其包装类)和String 都重写了equals和hashCode的方法,我把源码粘贴出来以备参考
a> String.java
public int hashCode() {int h = hash; int len = count;if (h == 0 && len > 0) { int off = offset; char val[] = value; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; }public boolean equals(Object anObject) {if (this == anObject) { return true;}if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) { if (v1[i++] != v2[j++])return false;}return true; }}return false; }
<span style="font-size: 12px; line-height: 22.75px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; background-color: rgb(255, 255, 255);"></span>
<span style="font-size: 12px; line-height: 22.75px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; background-color: rgb(255, 255, 255);">public int hashCode() {</span>
return value;
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
3.对于未重写equals和hashCode的类的对象.当使用equals时其实比较的是,两个对象的引用地址是否一致.所以和”==“的结果是一样的,而hashCode是其物理地址的一个标示
4.重写equals的时候,一般都要重写hashCode.其中的原理是因为.当我们使用集合的时候.比如Set 集合.它是需要对存储的元素进行判重的.那么集合是如何知道这个元素是否重复呢.
a>首先set会拿着要放入的对象obj的hashcode进行地址寻址
b>如果地址为空,则将对象放入对应的地址
c>如果地址不是空,则比较地址对象和现有的对象的equals是否相同,如果相同则元素覆盖原来的元素.如果不相同则将现有的元素插入
0 0
- hashcode的简单简析
- 改写equals与hashCode的简单方法
- HashCode简单用法
- hashcode()方法简单学习
- hashcode简单学习
- Java Object的hashCode()和equals()简单分析
- hashcode和equals 简单的方法也可能引发问题
- 简单探讨java中String类的hashCode()
- Java中Map的简单实现 用数组,链表,hashcode
- hashCode的作用
- Java的hashCode解析
- hashCode()的作用
- Hashcode的作用
- hashCode()的作用
- Hashcode 的作用
- hashCode方法的使用
- hashCode方法的使用
- hashCode()的作用
- linux常用命令大全
- Oracle数据库连接异常:ORA-12505 TNS:listener does not currently know of SID 。。。。
- 《常见计算机术语缩写》
- 如何禁用Windows错误报告
- qt 之 macro
- hashcode的简单简析
- 80端口被NT kernel & System 占用pid 4
- 中文字体font-family常用列表
- uav 11258 String Partition (DP)
- VC6.0建立控制台程序实现PDA应用
- 网络工程1101班2014-2015学年《网络软件开发实训》期末考试
- 【ORA-02049】超时分布式事务处理等待锁
- 21天学通JavaScript读书笔记 (二)数组
- Django和js中的传參方法