想要明确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. Linux添加用户组和删除用户组

    1.添加用户组使用groupadd命令添加用户组:groupadd group_name此操作需由系统管理员进行.2.删除用户组使用groupdel命令删除用户组:groupdel group_nam ...

  2. 一键生成Spring MVC + MyBatis + maven项目

    首先创建一个新的maven项目,在src/main/java创建一个类Test 然后在Test复制以下代码: import java.io.*; import java.sql.Connection; ...

  3. 元素属性的添加删除(原生js)

    添加属性 odiv.setAttribute("title","hello div!"); odiv.setAttribute("class" ...

  4. servlet-请求重定向

    package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...

  5. db2 jdbc连接字符串中 指定currentSchema

    场景:连接DB2数据库的,jdbc的连接字符串中没有给当前的数据源用户指定默认的schema,而当前的数据源用户下可能有多个schema,则会使用数据源用户默认的schema. 例如:admin用户的 ...

  6. vim之<F12> 一键生成tags的一些小优化

    在之前我写的<<vim之tags>>中最后提到将vim和tags成和更新的全部集中到一个<f12>键上来. 这在实践中证明是相当方便的, 不过依然村庄几个问题如下: ...

  7. 12--C++_运算符重载

    C++_运算符重载 什么是运算符的重载? 运算符与类结合,产生新的含义. 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义) 怎么实现运算符的重载? 方式:类的成员函数 ...

  8. Web前端性能优化——提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

  9. Java程序员怎么不断进阶 必须要掌握哪些技能

    Java程序员怎么不断进阶?必须要掌握哪些技能?成为架构师是Java程序员职业规划中的重要一环,但如何才能快速实现进阶困扰了许多Java程序员.无论是从技能深度还是实战经验,架构师都远超于普通的Jav ...

  10. 微智魔盒APP开发程序解析

    微智魔盒系统开发找崔经理l88Z.6ZZ685l.微智魔盒app开发.微智魔盒商城开发.微智魔盒软件开发,微智魔盒模式开发,微智魔盒源码开发.微智魔盒开发. @Override publicvoidr ...