HashCode深入理解
来源:互联网 发布:淘宝儿童电动汽车 编辑:程序博客网 时间:2024/06/04 20:04
带着问题去理解:
1. Object类HashCode方法是如何实现的,和String类有什么区别?
2.HashCode和Equals之间的关系?
一、hashCode作用
hashCode方法返回该对象的哈希码值,主要是用于对象查找的快捷性,要确保同一个对象多次hashcode一定返回同样的hashcode值(其实hashcode值是有缓存)。如在HashTable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的.
二、HashCode实现
hashcode主要用于对象查找的快捷性,在设计时应尽量避免hashcode值一样造成冲突。所以要计算得到不同对象有hashcode值,应找到每个对象都不一样的特性,寻思着Object对象大概只有内存地址不一样。所以Object类中hashCode方法实现如下:
public native int hashCode();
Object类直接是直接调用本地c++方法中的hashCode,原因是java中是没办法拿到对象内存中的地址,所以转交给c++中实现,在底层c++代码中,通过对对象内存地址进行映射,就得到对象的散列值。
那在String类中,String类是继承Object类,会是同样的方法获得hashcode吗?
我们不妨来考虑String类对象的场景,String a = new String(“abc”) 和 String b = new String(“abc”),a对象和b对象的内存地址不一样,但是他们的内容是一样的。显然,如果同样采用内存的方法来获取hashcode值,就会出现相同内容,hashcode值不一样。所以在String类中,重写了hashCode方法
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;
}
在String类中,是根据字符串char值相加获取hashcode值,这样使得通过new出来相同内容的对象,能够有相同hashcode值。
三、hashCode与equals关系
相同的hashcode值,equals不一定相同。这是因为不同的内存地址,有可能equals相同。
但equals相同,hashcode值一定相同
- 深入理解HashCode(转)
- HashCode深入理解
- HashCode深入理解
- 深入理解HashCode和Equals
- 深入理解 equal 与 hashcode
- java HashCode之深入理解
- Java hashCode() 方法深入理解
- HashCode 深入理解 关键是与collection的关系
- 深入理解容器系列片之五--------hashcode和equal
- 基础加强____【哈希表数据结构】【深入理解hashcode & equals】
- 深入理解容器系列之五--------hashcode和equal
- 深入理解Java 中hashcode() 和equals()方法
- equals和HashCode深入理解以及Hash算法原理
- equals和HashCode深入理解以及Hash算法原理
- 理解 hashCode()
- hashCode 理解
- 理解hashcode
- 理解hashcode
- hdu1874畅通工程续 spfa学习
- SSH免密码登录
- 支持常见文件系统类型U盘
- 分享Kali Linux 2016.2第49周虚拟机
- Leetcode28. Implement strStr()
- HashCode深入理解
- QEMU,一个快速的和便捷的动态翻译器(论文译文)
- 各种时间的变换
- iOS多线程总结
- AFNetworkReachabilityManager 监控网络状态(四)
- A标签中通过href和onclick传递的this对象实现思路
- easyui datagrid合并行进入可编辑模式错位问题
- Jenkins配置(待修改)
- Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建