`

equal与hashcode问答

阅读更多

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编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...

    equal与==区别

    ### equal与==的区别 在Java编程语言中,`equal`方法和`==`操作符都是用来比较对象之间是否相等的工具,但它们之间存在重要的差异。本文将从三个方面进行详细的对比分析:字符串的比较、非字符串对象的比较以及基本...

    Java中equals()与hashCode()的原理与设计

    1、何时需要重写equals()  当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。  2、为什么改写equals()的时候,总是要改写hashCode() ...  3、什么是equals()与如何设计equals()

    关于hashCode()和equals()的本质区别和联系

    如果我们忽略 equals() 和 hashCode() 方法,那么我们将不能可靠地检索相关的值,除非我们在 get() 调用中使用与 put() 调用中极其类似的对象实例。这要求确保在我们的整个程序中,只能使用对应于特定整数值的对象的...

    string-hashcode:java.lang.String.hashCode

    字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院

    Java-Reflection-and-Object-Comparison-in-Java:Java Reflection创建适当的对象,覆盖equal和hashCode方法

    Java中的Java反射和对象比较 项目介绍 首先,通过以下方式设计Java类: 2个私有数据成员int IntValue; 字符串StringValue; 空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void ...

    led图文控制系统V5.33专为EQUAL LED控制器配套使用

    7. **安装与配置**:在使用前,用户需要正确安装LED图文控制系统,并将它与EQUAL LED控制器进行连接和配置。这可能涉及到USB、网络或串口通信,具体步骤通常会在软件的用户手册中有详细说明。 8. **故障排查与维护*...

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    1、**hashCode与equals两者之间的关系**: 当我们说两个对象`equals()`返回`true`时,意味着它们在逻辑上是相等的。根据Java规范,如果两个对象相等(即`equals()`返回`true`),那么它们的`hashCode()`方法必须...

    前端开源库-equal-pmb

    "前端开源库-equal-pmb"这个项目似乎就是这样一个致力于解决特定问题的库,尤其关注值的相等性判断。"equal-pmb"可能是一个用于比较JavaScript对象或者值是否相等的库,其设计目标是无论最新的相等概念如何变化,都...

    jQuery实现表单验证------equalTo方法

    equalTo: "请输入与确认字段相同的值" } } }); ``` 在上述代码中,`field1`是我们要验证的字段,`field2`是需要匹配的字段,`#field2`是其对应的DOM选择器。`messages`对象用于定义当验证失败时显示的错误信息。...

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    MATLAB中isequal函数转化为C语言,有项目算法使用matlab中isequal函数进行运算,这里需要将转化为C语言

    而对于非数字值,如NaN和NaT,`isequal`会认为它们与任何其他值都不等。 在MATLAB中,`isequal`处理特殊情况的例子如下: ```matlab A = zeros(3,3) + 1e-20; B = zeros(3,3); tf = isequal(A, B); % tf为0,因为...

    无法解决 equal to 操作的排序规则冲突

    字符集与排序规则的关系** 在选择排序规则时,还需要考虑字符集的选择。例如,在使用简体中文时,可以选择`Chinese_PRC_CI_AI_WS`作为排序规则,同时使用UTF-8或GBK作为字符集。 通过以上详细的解释和解决方案,...

    Java中的hashcode方法介绍

    Java中的`hashCode`方法是Java编程语言中的一个重要概念,它主要与对象的散列处理相关。在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态...

    node-deep-equal, 节点算法的assert.deepEqual.zip

    node-deep-equal, 节点算法的assert.deepEqual 的深度相等节点的assert.deepEqual() algorithm 作为独立模块。这个 MODULE的速度比在 try/catch 中封装 assert.deepEqual() 快2 倍。 示例var equal

    3 Java中关于==和equal的区别 以及equals()方法重写

    但是 Java 中的 == 与 equal 是有区别的。 == 操作符是 Java 语言中的一个二元操作符,用于比较两个操作数的值是否相等。它可以用于基本类型和对象的比较。在基本类型中,== 操作符比较的是变量的值是否相等,而在...

    Java equals 方法与hashcode 方法的深入解析

    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 ...

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...

    fast-deep-equal:最快的深度相等检查,支持 Date、RegExp 和 ES6 Map、Set 和类型数组

    ES6 equal ( require('fast-deep-equal/es6') ) 也支持: 地图 套 类型化数组 用法 var equal = require ( 'fast-deep-equal' ) ; console . log ( equal ( { foo : 'bar' } , { foo : 'bar' } ) ) ; // true 要...

    plus_equal_scalar.rar_plus

    本文将深入探讨“plus_equal_scalar”这一主题,以及与之相关的文件“quotearg.c”,“plus_equal_scalar.pass.c”和“quotearg.h”。这些文件通常与C语言编程相关,涉及到字符串处理和函数库的实现。 首先,让我们...

Global site tag (gtag.js) - Google Analytics