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方法可能相等。可能不等。
Java基础之hashCode方法具体解释的更多相关文章
- Java 基础:hashCode方法
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注J ...
- 千万不要误用 java 中的 HashCode 方法
刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数m ...
- Java基础String的方法
Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值); ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- 【转】浅谈Java中的hashcode方法(这个demo可以多看看)
浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...
- java :equals()和hashcode()方法的结合使用
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- 【转】浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...
- Java基础五(方法)
今日内容介绍1.方法基础知识2.方法高级内容3.方法案例 ###01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. ###02方法的定义格 ...
- Java中的hashcode方法
一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode.在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列 ...
随机推荐
- ACM_Power Mouth
Power Mouth Time Limit: 2000/1000ms (Java/Others) Problem Description: Your task is to calculate the ...
- 前端h5开发调试神奇vconsole
(1)项目中安装vconcole插件 npm install vconcole (2)在vue项目中main.js中引入插件 import Vconsole from 'vconsole'; cons ...
- Android 串口驱动和应用测试
这篇博客主要是通过一个简单的例子来了解Android的串口驱动和应用,为方便后续对Android串口服务和USB虚拟串口服务的了解.这个例子中,参考了<Linux Device Drivers& ...
- JS高级——歌曲管理
1.将歌曲管理的CURD方法放到原型中 2.在构造函数中,我们只有一个属性是songList,因为音乐库不是共有的,如果将songList放入原型中,任何一个人的一次修改songList,都将把son ...
- GNSS数据下载网站
Bernese 数据表文件下载 rinex文件下载 ftp://nfs.kasi.re.kr DCB.ION文件ftp://ftp.unibe.ch/AIUB/CODE/ 下载5.0更新文件 ftp: ...
- js 时间 Fri Dec 12 2014 08:00:00 GMT+0800
第一种var d = new Date('Fri Dec 12 2014 08:00:00 GMT+0800'); ) + '-' + d.getDate() + ' ' + d.getHours() ...
- MVC Ajax调用Action时-OnActionExecuting RedirectResult 无法跳转的处理办法
public class BaseController : Controller { protected override void OnActionExecuting(ActionExecuting ...
- redis数据库学习笔记
redis数据库 工作需要,简单了解一下redis数据库,供后续参考和复习使用. 一.简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字 ...
- Win32中 DLL、Lib 库的创建机器使用
Windows 下 的静态库和动态库 一.静态函数库(Lib) 1. 静态函数库的制作(C/C++) —— 打开新建项目,然后选中Win32项目,接着在创建项目中选择 Lib,再接着将函数.实现功能的 ...
- redis环境部署
运维开发技术交流群欢迎大家加入一起学习(QQ:722381733) 一.Redis服务介绍: redis简单来讲就是一个数据库,一个用来存储缓存的数据库容器,主要是让项目数据能写进缓存,为用户提搞更舒 ...