经常看到面试题有这个问题,今天查了下资料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语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...
在Java中,正确实现`equals()`和`hashCode()`方法对于保证程序的逻辑正确性和性能至关重要。开发者需要确保这两个方法的一致性和效率,特别是在自定义类时,更要注意遵循上述提到的原则。只有这样,才能充分利用Java...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 和 `HashSet`)时。`equals()` 方法用于判断两个对象是否相等,而 `hashCode()` 方法则用于...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的成员,尤其是在处理对象比较和集合操作时。这两个方法通常与`Object`类中的默认实现相关联,但为了在实际开发中实现正确的对象比较和哈希表操作...
在Java编程语言中,`equals()`方法和`hashCode()`方法是两个非常重要的概念,它们主要用于对象的比较和哈希表的高效运作。本解析将深入探讨这两个方法的用途、实现原理以及它们之间的关联。 首先,`equals()`方法是...
在Java编程语言中,序列化(Serialization)和重写`hashCode`及`equals`方法是两个重要的概念,它们各自有着特定的用途,并且在某些情况下相互关联。下面将详细阐述这两个概念及其应用。 首先,Java序列化是将一个...
Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个线程对共享资源的访问冲突。在Java中,由于线程共享内存空间,如果没有适当的同步机制,可能会导致数据不一致...
在重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,原因在于 `equals()` 和 `hashCode()` 在哈希表(如HashMap)中有密切关联。`hashCode()` 返回一个整数值,代表对象的哈希码,用于快速定位对象。当两...
.equals方法和hashCode方法是相关的,重载了equals方法必须同时重载hashCode方法,否则可能会出现意想不到的结果。 陷阱3:建立在会变化字域上的equals定义。equals方法不能依赖于可变的字段,否则可能会出现...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
### Java基础知识点详细解析 ...另外,hashCode()方法和equals()方法虽然有关联,但是它们的关系并不意味着可以用hashCode()方法的结果直接推断equals()方法的结果。这些知识点都是Java基础面试中常见的考察点。
本节课主要讲解Java基础知识,包括跨平台性、逻辑运算符、构造器、break、continue、return语句、equals和hashCode方法、String类继承、值传递和引用传递等内容。 1. 跨平台性 Java语言编写的程序,一次编译后,...
10. Java I/O:包括流的概念,以及字节流(InputStream和OutputStream)和字符流(Reader和Writer)的区别和用法。 11. Java新特性:关注Java在不同版本中引入的新特性,比如Java 8的Lambda表达式、Stream API、新...
例如,`java.lang`包中的`Object`类是所有Java类的基类,包含了一些通用的方法如`toString()`、`equals()`和`hashCode()`;`java.io`包提供了I/O流的抽象,支持文件操作和网络数据传输;`java.util`包则包括了各种...
2.2 JDK和JRE的区别:JDK(Java开发工具包)包含了JRE(Java运行时环境)以及编译Java源码的编译器和其他工具。JRE仅包含运行Java程序所需的环境。 2.3 “static”关键字的含义?能否在Java中重写私有或静态方法?...
在Java中,正确地使用hashCode()和equals()方法是非常重要的。在重写equals()方法时,必须同时重写hashCode()方法,以保证相等的对象拥有相同的哈希码。这样,当在使用HashMap这类集合时,才能确保对象的唯一性不会...
hashCode 和 equals 方法的关联 - **一致性原则**:如果两个对象相等(即 `equals()` 返回 `true`),那么它们的 `hashCode()` 必须返回相同的值。 - **散列集合**:在散列集合(如 `HashSet` 或 `HashMap`)中,`...
每个Table对应一个Java类,Column则作为类的成员变量,主键和外键可以转化为getter和setter方法,以及可能的构造函数和equals、hashCode方法。这样,开发人员就可以直接使用这些Java Bean进行业务开发,无需手动编写...
Java提供了丰富的内置方法,如`toString()`、`equals()`和`hashCode()`,同时开发者也可以自定义方法来实现特定的功能。 在设计类时,还需要考虑封装、继承和多态这三大面向对象特性。封装是隐藏类内部细节,提供...