equal与hashcode问答
1.hashcode()到底是干什么用的?好像是和数据结构的hash表有关?java对象怎么会和hash表有关的?java中的对象都是存在一个hash表中吗?
当你的对象存储在HashSet,HashMap,HsahTable等以hash表为工作机制的容器的时候 你才需要关心这个函数,不是java中对象都是存在一个hash表里面
2.为什么a.equal(b)==true则必定a.hashcode()==b.hashcode()。equal代表内容,hashcode代表内存地址,难道我理解错了吗?
谁说equals是比较内容的,默认的equals 就是与 == 一样的效果
3.很多类都重写了hashcode,比如Integer.hashcode返回的是Integer的intValue。他们为什么要重写呢?
就是因为Integer重写了equals() 方法 ,所以要重写hsahCode(),以保证a.equals(b) 为true时候,有a==b;重写只要为了满足可能把Integer对象放到hash容器里面
4.有人说a.equal(b)==true则必定a.hashcode()==b.hashcode();反之
a.hashcode()==b.hashcode()则不一定a.equal(b)==true;
那奇怪了,hashcode岂不是毫无用处了?大家都用hashcode做什么呢?
用hsahCode()主要是支持hash容器的正确运行,hash容器根据hashCode决定对象的存储位置
hash容器速度比较快
========================================================================
【JDK中的说明】
1,equals
public boolean equals
(Object
obj)
Indicates whether some other object is "equal to" this one.
The equals
method implements an equivalence relation on non-null object references:
- It is reflexive
: for any non-null reference value
x
, x.equals(x)
should return true
.
- It is symmetric
: for any non-null reference values
x
and y
, x.equals(y)
should return true
if and only if y.equals(x)
returns true
.
- It is transitive
: for any non-null reference values
x
, y
, and z
, if x.equals(y)
returns true
and y.equals(z)
returns true
, then x.equals(z)
should return true
.
- It is consistent
: for any non-null reference values
x
and y
, multiple invocations of x.equals(y)
consistently return true
or consistently return false
, provided no information used in equals
comparisons on the objects is modified.
- For any non-null reference value
x
, x.equals(null)
should return false
.
The equals
method for class Object
implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x
and y
, this method returns true
if and only if x
and y
refer to the same object (x == y
has the value true
).
Note that it is generally necessary to override the hashCode
method whenever this method is overridden, so as to maintain the general contract for the hashCode
method, which states that equal objects must have equal hash codes.
Parameters:
obj
- the reference object with which to compare.
Returns:
true
if this object is the same as the obj argument; false
otherwise.
See Also:
hashCode()
, Hashtable
2,hashCode
public int hashCode
()
Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable
.
The general contract of hashCode
is:
- Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode
method must consistently return the same integer, provided no information used in equals
comparisons on the object is modified. This integer need not remain
consistent from one execution of an application to another execution of
the same application.
- If two objects are equal according to the equals(Object)
method, then calling the
hashCode
method on each of the two objects must produce the same integer result.
- It is not
required that if two objects are unequal according to the
equals(java.lang.Object)
method, then calling the hashCode
method on each of the two objects must produce distinct integer
results. However, the programmer should be aware that producing
distinct integer results for unequal objects may improve the
performance of hashtables.
As much as is reasonably practical, the hashCode method defined by class Object
does return distinct integers for distinct objects. (This is typically
implemented by converting the internal address of the object into an
integer, but this implementation technique is not required by the JavaTM
programming language.)
Returns:
a hash code value for this object.
See Also:
equals(java.lang.Object)
, Hashtable
分享到:
相关推荐
### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...
### equal与==的区别 在Java编程语言中,`equal`方法和`==`操作符都是用来比较对象之间是否相等的工具,但它们之间存在重要的差异。本文将从三个方面进行详细的对比分析:字符串的比较、非字符串对象的比较以及基本...
1、何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 2、为什么改写equals()的时候,总是要改写hashCode() ... 3、什么是equals()与如何设计equals()
如果我们忽略 equals() 和 hashCode() 方法,那么我们将不能可靠地检索相关的值,除非我们在 get() 调用中使用与 put() 调用中极其类似的对象实例。这要求确保在我们的整个程序中,只能使用对应于特定整数值的对象的...
字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院
Java中的Java反射和对象比较 项目介绍 首先,通过以下方式设计Java类: 2个私有数据成员int IntValue; 字符串StringValue; 空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void ...
7. **安装与配置**:在使用前,用户需要正确安装LED图文控制系统,并将它与EQUAL LED控制器进行连接和配置。这可能涉及到USB、网络或串口通信,具体步骤通常会在软件的用户手册中有详细说明。 8. **故障排查与维护*...
1、**hashCode与equals两者之间的关系**: 当我们说两个对象`equals()`返回`true`时,意味着它们在逻辑上是相等的。根据Java规范,如果两个对象相等(即`equals()`返回`true`),那么它们的`hashCode()`方法必须...
"前端开源库-equal-pmb"这个项目似乎就是这样一个致力于解决特定问题的库,尤其关注值的相等性判断。"equal-pmb"可能是一个用于比较JavaScript对象或者值是否相等的库,其设计目标是无论最新的相等概念如何变化,都...
equalTo: "请输入与确认字段相同的值" } } }); ``` 在上述代码中,`field1`是我们要验证的字段,`field2`是需要匹配的字段,`#field2`是其对应的DOM选择器。`messages`对象用于定义当验证失败时显示的错误信息。...
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
而对于非数字值,如NaN和NaT,`isequal`会认为它们与任何其他值都不等。 在MATLAB中,`isequal`处理特殊情况的例子如下: ```matlab A = zeros(3,3) + 1e-20; B = zeros(3,3); tf = isequal(A, B); % tf为0,因为...
字符集与排序规则的关系** 在选择排序规则时,还需要考虑字符集的选择。例如,在使用简体中文时,可以选择`Chinese_PRC_CI_AI_WS`作为排序规则,同时使用UTF-8或GBK作为字符集。 通过以上详细的解释和解决方案,...
Java中的`hashCode`方法是Java编程语言中的一个重要概念,它主要与对象的散列处理相关。在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态...
node-deep-equal, 节点算法的assert.deepEqual 的深度相等节点的assert.deepEqual() algorithm 作为独立模块。这个 MODULE的速度比在 try/catch 中封装 assert.deepEqual() 快2 倍。 示例var equal
但是 Java 中的 == 与 equal 是有区别的。 == 操作符是 Java 语言中的一个二元操作符,用于比较两个操作数的值是否相等。它可以用于基本类型和对象的比较。在基本类型中,== 操作符比较的是变量的值是否相等,而在...
PS:本文使用jdk1.7解析1.Object类 的equals 方法 代码如下: /** * Indicates whether some other object is “equal to” this one. * * The {@code equals} method implements an equivalence relation * on ...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
ES6 equal ( require('fast-deep-equal/es6') ) 也支持: 地图 套 类型化数组 用法 var equal = require ( 'fast-deep-equal' ) ; console . log ( equal ( { foo : 'bar' } , { foo : 'bar' } ) ) ; // true 要...
本文将深入探讨“plus_equal_scalar”这一主题,以及与之相关的文件“quotearg.c”,“plus_equal_scalar.pass.c”和“quotearg.h”。这些文件通常与C语言编程相关,涉及到字符串处理和函数库的实现。 首先,让我们...