想要明确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方法可能相等。可能不等。

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

  1. Java 基础:hashCode方法

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注J ...

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

    刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数m ...

  3. Java基础String的方法

    Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值); ...

  4. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  5. 【转】浅谈Java中的hashcode方法(这个demo可以多看看)

    浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...

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

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  7. 【转】浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...

  8. Java基础五(方法)

    今日内容介绍1.方法基础知识2.方法高级内容3.方法案例 ###01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. ###02方法的定义格 ...

  9. Java中的hashcode方法

    一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode.在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列 ...

随机推荐

  1. ACM_小凯的排序(字符串)

    小凯的排序 Time Limit: 2000/1000ms (Java/Others) Problem Description: 调皮的小凯喜欢排序,拿到什么东西都要排一下序.现在他觉得单一的递增递减 ...

  2. 手势识别官方教程(7)识别缩放手势用ScaleGestureDetector和SimpleOnScaleGestureListener

    1.Use Touch to Perform Scaling As discussed in Detecting Common Gestures, GestureDetector helps you ...

  3. [转]Linux下paste命令详解

    转自:http://blog.csdn.net/andy572633/article/details/7214126 paste单词意思是粘贴.该命令主要用来将多个文件的内容合并,与cut命令完成的功 ...

  4. NHibernate学习(零)-本次学习遇到的错误汇总

    问题一: "System.TypeInitializationException"类型的未经处理的异常在 KimismeDemo.exe 中发生 其他信息: "NHibe ...

  5. Java系列学习(七)-面向对象

    1.成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中 方法外 局部变量:方法中 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创 ...

  6. [ CTSC 2007 / BZOJ 2151 ] Backup / 种树

    \(\\\) \(Description\) 给出一个数轴上\(N\)个点的坐标\(A_i\),选择\(K\)个点对,使得这\(K\)个点对每个点对的距离之和尽可能小. \(N\in [0,10^5] ...

  7. JavaScript入门笔记

    第一章 JavaScript语法 1.1 初识JavaScript 1.3 数据类型 1.4 string和boolean类型 1.5 算数操作符 第二章 JavaScript流程控制语句 2.1 循 ...

  8. JS——祝愿墙

    注意事项: 1.for循环的下一层注册了事件的话,事件函数中关于变量i的节点元素是不允许出现的,因为在函数加载的时候,只会加载函数名,不会加载函数体,外层for循环会走完一边,变量i一直会停留在最后一 ...

  9. python web 开发学习路线

    转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...

  10. (转) Arcgis for Javascript实现两个地图的联动

    http://blog.csdn.net/gisshixisheng/article/details/40127895 今天在看天地图的时候,有一个多时相的地图显示功能,感觉很好玩,作为技术控的我晚上 ...