`

Java HashCode和Equals关联和区别

 
阅读更多

 

 

经常看到面试题有这个问题,今天查了下资料mark一下。

    我觉得英文的注释写的特别好,总结一下:

    1)如果两个对象equals方法返回true,那么hashCode方法返回的值必然相同

    2)如果两个对象equals方法返回false,但是不要求hashCode方法返回的值不同。

  

    其实HashCode方法主要用于Set容器来提高性能,极大的减少调用equals方法的次数。

    Set容器中有A对象,然后放入B对象。

    如果B和A的hashCode不相同,可以确保A,B不相同,直接放入容器中。

    如果B和A的hashCode相同,那么再判断equals方法是否相同。

 

 /**
     * Returns a hash code value for the object. This method is 
     * supported for the benefit of hashtables such as those provided by 
     * <code>java.util.Hashtable</code>. 
     * <p>
     * The general contract of <code>hashCode</code> is: 
     * <ul>
     * <li>Whenever it is invoked on the same object more than once during 
     *     an execution of a Java application, the <tt>hashCode</tt> method 
     *     must consistently return the same integer, provided no information 
     *     used in <tt>equals</tt> 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. 
     * <li>If two objects are equal according to the <tt>equals(Object)</tt>
     *     method, then calling the <code>hashCode</code> method on each of 
     *     the two objects must produce the same integer result. 
     * <li>It is <em>not</em> required that if two objects are unequal 
     *     according to the {@link java.lang.Object#equals(java.lang.Object)} 
     *     method, then calling the <tt>hashCode</tt> 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.
     * </ul>
     * <p>
     * As much as is reasonably practical, the hashCode method defined by 
     * class <tt>Object</tt> 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 
     * Java<font size="-2"><sup>TM</sup></font> programming language.)
     *
     * @return  a hash code value for this object.
     * @see     java.lang.Object#equals(java.lang.Object)
     * @see     java.util.Hashtable
     */
    public native int hashCode();

 

 

 

分享到:
评论

相关推荐

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

    java中hashcode()和equals()的详解.docx

    在Java中,正确实现`equals()`和`hashCode()`方法对于保证程序的逻辑正确性和性能至关重要。开发者需要确保这两个方法的一致性和效率,特别是在自定义类时,更要注意遵循上述提到的原则。只有这样,才能充分利用Java...

    java 基础之(equals hashcode)

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 和 `HashSet`)时。`equals()` 方法用于判断两个对象是否相等,而 `hashCode()` 方法则用于...

    equals与hashCode在实际开发中的重写写法

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的成员,尤其是在处理对象比较和集合操作时。这两个方法通常与`Object`类中的默认实现相关联,但为了在实际开发中实现正确的对象比较和哈希表操作...

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

    在Java编程语言中,`equals()`方法和`hashCode()`方法是两个非常重要的概念,它们主要用于对象的比较和哈希表的高效运作。本解析将深入探讨这两个方法的用途、实现原理以及它们之间的关联。 首先,`equals()`方法是...

    java 序列化和重写 hashCode 的原因

    在Java编程语言中,序列化(Serialization)和重写`hashCode`及`equals`方法是两个重要的概念,它们各自有着特定的用途,并且在某些情况下相互关联。下面将详细阐述这两个概念及其应用。 首先,Java序列化是将一个...

    Java synchronized详细解读.docx

    Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个线程对共享资源的访问冲突。在Java中,由于线程共享内存空间,如果没有适当的同步机制,可能会导致数据不一致...

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

    在重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,原因在于 `equals()` 和 `hashCode()` 在哈希表(如HashMap)中有密切关联。`hashCode()` 返回一个整数值,代表对象的哈希码,用于快速定位对象。当两...

    Java编程中避免equals方法的隐藏陷阱介绍

    .equals方法和hashCode方法是相关的,重载了equals方法必须同时重载hashCode方法,否则可能会出现意想不到的结果。 陷阱3:建立在会变化字域上的equals定义。equals方法不能依赖于可变的字段,否则可能会出现...

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

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

    java面试题(1).pdf

    ### Java基础知识点详细解析 ...另外,hashCode()方法和equals()方法虽然有关联,但是它们的关系并不意味着可以用hashCode()方法的结果直接推断equals()方法的结果。这些知识点都是Java基础面试中常见的考察点。

    Java面试宝典Beta6.0.pdf

    本节课主要讲解Java基础知识,包括跨平台性、逻辑运算符、构造器、break、continue、return语句、equals和hashCode方法、String类继承、值传递和引用传递等内容。 1. 跨平台性 Java语言编写的程序,一次编译后,...

    Java最新面试题大全

    10. Java I/O:包括流的概念,以及字节流(InputStream和OutputStream)和字符流(Reader和Writer)的区别和用法。 11. Java新特性:关注Java在不同版本中引入的新特性,比如Java 8的Lambda表达式、Stream API、新...

    Java rt.jar源码

    例如,`java.lang`包中的`Object`类是所有Java类的基类,包含了一些通用的方法如`toString()`、`equals()`和`hashCode()`;`java.io`包提供了I/O流的抽象,支持文件操作和网络数据传输;`java.util`包则包括了各种...

    JAVA 面试 问题和答案

    2.2 JDK和JRE的区别:JDK(Java开发工具包)包含了JRE(Java运行时环境)以及编译Java源码的编译器和其他工具。JRE仅包含运行Java程序所需的环境。 2.3 “static”关键字的含义?能否在Java中重写私有或静态方法?...

    Java中HashMap的工作机制

    在Java中,正确地使用hashCode()和equals()方法是非常重要的。在重写equals()方法时,必须同时重写hashCode()方法,以保证相等的对象拥有相同的哈希码。这样,当在使用HashMap这类集合时,才能确保对象的唯一性不会...

    java面试培析

    hashCode 和 equals 方法的关联 - **一致性原则**:如果两个对象相等(即 `equals()` 返回 `true`),那么它们的 `hashCode()` 必须返回相同的值。 - **散列集合**:在散列集合(如 `HashSet` 或 `HashMap`)中,`...

    java完美解析pdm

    每个Table对应一个Java类,Column则作为类的成员变量,主键和外键可以转化为getter和setter方法,以及可能的构造函数和equals、hashCode方法。这样,开发人员就可以直接使用这些Java Bean进行业务开发,无需手动编写...

    Java类思维导图

    Java提供了丰富的内置方法,如`toString()`、`equals()`和`hashCode()`,同时开发者也可以自定义方法来实现特定的功能。 在设计类时,还需要考虑封装、继承和多态这三大面向对象特性。封装是隐藏类内部细节,提供...

Global site tag (gtag.js) - Google Analytics