Java基础之hashCode方法具体解释

想要明确hashCode的作用,必须要先知道java中的集合。(不明确的请看Java基础之集合框架具体解释(二)List篇Java基础之集合框架具体解释(三)Set篇

Java中的Collection集合有两类。一类是List,还有一类是Set,前者集合内的元素是有序的,元素能够反复;后者元素无序且元素不可反复。

而我们通常使用Object.equals方法来推断两个元素是否反复。即当我们想查找一个元素中是否包括某个对象时。就是逐一取出每一个元素与要找的元素进行比較。当发现某个元素与要查找的对象进行equals方法比較的结果相等时。则停止继续查找并返回肯定的信息,否则返回否定的信息。假设一个集合中有非常多元素譬如成千上万个元素。而且没有包括要查找的对象时,则以为着我们的程序须要从该集合中取出成千上万个元素进行逐一比較才干得到结果,于是,有人发明了一种哈希算法来提高从集合中查找元素的效率。这样的方式将集合分成若干个存储区域。每一个对象能够计算出一个哈希码,能够将哈希码分组,每组相应某个存储区域,依据一个对象的哈希码就能够确定该对象应该存储的那个区域。

hashCode能够这样理解:它返回的就是依据对象的内存地址换算出的一个值。这样一来,当集合要加入新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。

假设这个位置上没有元素,它就能够直接存储在这个位置上了,不用再进行不论什么比較了。假设这个位置上已经有元素了,就调用它的equals方法与新元素进行比較,同样的话就不存了,不同样就散列其它的地址

这样一来实际调用equals方法的次数就大大的减少了。差点儿仅仅须要一两次。

因为使用哈希算法的高效率。Set接口的重要实现类hashSet实际上就是採用的哈希算法来推断反复元素。具体请移步Java基础之集合框架具体解释(三)Set篇

小结:

  • 仅仅有类的实例对象要被採用哈希算法进行存储和检索时。这个类才须要按要求覆盖hashCode方法。及时程序可能临时不会用到当前类的hashCode方法,可是为它提供一个hashCode方法也没有什么不好,没准以后什么时候又用到这种方法了,所以通常要求hashCode方法和equals方法同一时候被覆盖。

  • equals方法相等的两个对象。hashCode方法一定相等,equals方法不相等的两个对象,却不能证明他们的hashCode方法不相等。换句话说equals方法不相等的两个对象。hashCode有可能相等。

    反过来。hashCode方法不相等的两个对象,一定能推出equals方法也不等。hashCode方法相等的两个对象。equals方法可能相等。可能不等。

时间: 2024-10-17 21:00:07

Java基础之hashCode方法具体解释的相关文章

Java 基础:hashCode方法

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注Java 基础 + H5(学习) 其他操作系统,算法,数据结构当成课外书博览.有时候,就是那样你越是专注方面越多对自己打击越大学啥啥都不好.今天带来Java基础:hashCode方法 二.hashCode方法 hash code(散列码,也可以叫哈希码值)是对象产生的一个整型值.其生成没有规律的.二者

Java基础之hashCode方法详解

想要明白hashCode的作用,必须要先知道java中的集合.(不明白的请看Java基础之集合框架详解(二)List篇和Java基础之集合框架详解(三)Set篇) Java中的Collection集合有两类,一类是List,另一类是Set,前者集合内的元素是有序的,元素可以重复:后者元素无序且元素不可重复.而我们通常使用Object.equals方法来判断两个元素是否重复.即当我们想查找一个元素中是否包含某个对象时,就是逐一取出每个元素与要找的元素进行比较,当发现某个元素与要查找的对象进行equ

千万不要误用 java 中的 HashCode 方法

刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数map也是互相独立的 不过很奇怪的一个 两个Action对象的hashmap是不同的但是它们的对象变量 paraterMap 的 哈希值 居然是一个 我大不解!( 找到原因以后发现这个问题其实只是一个好多年没有再提起的基础问题 ) 不过发现确实有朋友在网上说这个问题曾经引发过bug Java中的hashCode

Java基础String的方法

Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值);在输出时任何数据类型与字符串进行拼接,结果一般是字符串 1 public class StringFunc { 2 3 public static void main(String[] args){ 4 //字符串拼接 5 String str1; 6 str1 = "hello"; 7

浅谈Java中的hashCode方法

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到has

浅谈Java中的hashcode方法 - 海 子

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程

java中的hashCode()方法

电话面试问到了HashMap里的类要实现什么方法,只知道是按哈希值查找所以查找效率很快,其它的一问三不知,现在来研究研究. 想研究研究,但是却不知道从哪里下手.... 汗!!!首先来咬文嚼字吧 什么是哈希值?百度了一下:哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值.哈希值是一段数据唯一且极其紧凑的数值表示形式... 还是看不出和java类有什么关系...以前学数据结构时哈希表(也叫做散列表)这章还是很重要的,关键是那个哈希映射的哈希函数,也就是哈希算法,根

java :equals()和hashcode()方法的结合使用

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到h

浅谈JAVA中的“hashcode()”方法

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 一.hashCode方法的作用 对于包含容器类型的程