java的HashCode方法
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。
前者集合内的元素是有序的,元素可以重复;
后者元素无序,但元素不可重复。
要想保证元素不重复,可两个元素是否重复应该依据Object.equals方法来判断。
如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。
也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。
于是,Java采用了哈希表的原理。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。
当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,
就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。 所以这里存在一个冲突解决的问题。
这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同。
hashcode这个方法是用来鉴定2个对象是否相等的。
一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等 了。
简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。
举个例子,有个学生类,属性只有姓名和性别,那么我们可以 认为只要姓名和性别相等,那么就说这2个对象是相等的。
简单来讲,hashcode相 当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。
我们一般在覆盖equals的同时也要 覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,
那么hashcode的方法也要返回姓名 的hashcode值加上性别的hashcode值,
这样从逻辑上,他们就一致了。 要从物理上判断2个对象是否相等,用==就可以了。
转载于:https://www.cnblogs.com/shy1766IT/p/3337266.html
java的HashCode方法相关推荐
- Java Object.hashCode()方法
Java Object.hashCode()方法 @(JAVA)[java] 更详细的内容可以参考<effective java>与<think in java> Object ...
- Java中hashCode()方法以及HashMap()中hash()方法
Java的Object类中有一个hashCode()方法: public final native Class<?> getClass(); public native int hashC ...
- java重写hashcode方法代码_Java重写hashcode方法
覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个 覆写hashcode 1. 把某个非零常数值 ...
- java中hashCode方法与equals方法的用法
首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重 ...
- Java重写hashcode方法
1.先初始化一个整形变量,为此变量赋予一个非零的常数值,比如int result = 17; 2.选取equals方法中用于比较的所有域,然后针对每个域的属性进行计算: (1) 如果是boolean值 ...
- java中equals方法的参数_equals方法的参数必须为Object类型的引用变量
核心结论:子类重写Object类的equals方法需要注意的事项 重写的时候一定要注意equals方法的参数是Object obj类型的引用变量.绝对不可以是其他类型的变量.因为这样的话,和父类Obj ...
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- Java拾遗:001 - 重写 equals 和 hashCode 方法
2019独角兽企业重金招聘Python工程师标准>>> 重写equals方法 在Java中Object类是一个具体类,但它设计的主要目的是为了扩展,所以它的所有非final方法,都被 ...
- Java基础提升篇:equals()与hashCode()方法详解
概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() Object类是类继承 ...
- 深入理解Java的equals和hashCode方法
1.谈谈equals方法 相信大家对这个这个方法一定不陌生.该方法是Object基类里的非final方法(被设计成可覆盖的),下面我们来看看Object中是如何实现该方法的.源代码如下: public ...
最新文章
- 【学习笔记】超简单的多项式求逆(含全套证明)
- python真的超过java了吗-Python 的开发效率真的比 Java高吗?
- javax.mail 发送
- AES加密算法的详细简介
- python二维列表写入excel_用Python实现合并excel列表
- Softmax Derivation
- python爬虫股票数据分析判断股票好坏_教你用Python爬虫股票评论,简单分析股民用户情绪...
- 2016年第七届(C/C++)B组蓝桥国赛题
- 程序员到创业,成长之路的技能分享
- Python基础(8)字符串及常用操作
- C++转erlang后感想
- 文华财经wh6如何导入需要的指标
- 专访李果:初生牛犊不怕虎的移动创业者
- mysql-mmm架构深度详解
- ES6(ES2015)
- PHY--PUSCH
- 阿里云产品有哪些?阿里云产品种类整理汇总
- nuke linux 插件,NUKE插件:通过环境变量设置NUKE GIZMO插件
- SE 的 ONNX 图
- java用tkmapper分组查询_tk.mybatis 中的通用Mapper自定义SQL语句