`
javawebsoa
  • 浏览: 417807 次
社区版块
存档分类
最新评论

Java学习笔记:(09)覆盖equals时总要覆盖hashCode

 
阅读更多

每个覆盖了equals方法的类中,也必须覆盖hashCode方法。

如果不这样的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。

在引用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一的返回同一个整数。在一个应用程序的多次执行过程中,每次执行所返回的整数可以不一致。

如果连个对象根绝equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样的整数结果。

如果两个对象根据equals方法比较是不相等的,那么调用这两个对象中任意一个对象的hashCode方法,则不一定要蚕声不同的整数结果。但是程序员应该知道,给不相等的对象产生截然不同的整数结果,有可能提高散列表(hash table)的性能。(比如,当你一个entity只根据id比较是否相等,但是在没实例化之前,没有id数值,那么默认的equals返回false,但是hashCode返回的值却相等。)

结果却返回了null,是因为即使两个equals的PhoneNumber,但是,他们的hashCode却不相等。

一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”。

必须排除equals比较计算中没有用到的任何域,否则很有可能违反hashCode约定的第二条。



分享到:
评论

相关推荐

    effective java 读书笔记

    - Item9:当覆盖equals时,必须同时覆盖hashcode,以保持哈希表的行为一致性。 - Item10:toString方法应返回对象状态的简洁表示,便于调试和日志记录。 - Item11:谨慎覆盖clone方法,因为它涉及到对象的深拷贝...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    java笔记java笔记java笔记

    以上就是从给定的信息中整理出来的Java学习笔记的主要知识点。这些知识点涵盖了Java的核心内容和技术,对于初学者和进阶者都非常有用。深入理解和掌握这些知识点,对于成为一名优秀的Java开发者至关重要。

    Java学习笔记一

    在Java学习笔记中,我们将详细探讨这些主题,并通过实例和练习来加深理解。例如,我们可以创建一个简单的继承和多态示例,如定义一个抽象的动物类,然后创建具体的狗和猫类,这两个子类可以覆盖父类的`makeSound()`...

    java实战经典学习笔记

    ### Java实战经典学习笔记知识点概览 #### 一、Java概述及开发环境搭建 - **Java概述** - Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。 - Java的设计目标是“一次编写,到处运行”,这...

    java内部学习笔记.docx

    1. Object类:所有Java类的根类,包含equals()、hashCode()等基本方法。 2. String类:不可变的字符序列,广泛用于文本处理。 3. StringUtils类:Apache Commons Lang提供的字符串操作工具类。 4. StringBuilder类:...

    Java-JDK、数据库系统开发、Web开发学习笔记

    Java-JDK、数据库系统开发、Web开发学习笔记 Java-JDK部分: 1. Object类的所有方法及功能:Object类是Java中的顶层类,所有类实际上都继承了Object类的所有方法。Object类提供了以下方法: * protected Object ...

    全方位java学习笔记

    ### 全方位Java学习笔记知识点总结 #### JSP内置对象详解 ##### 1. `page`对象 - **定义**:`page`对象是当前JSP页面本身的引用,类似于面向对象编程中的`this`关键字。 - **实现**:它是`java.lang.Object`类的...

    学习笔记java\CoreJava笔记\CoreJava_day09

    在Java编程语言中,String类是一个非常核心且重要的部分,它是不可变的,意味着一旦创建了一个String对象,其内容就不能更改。以下是对标题和描述中涉及的Java String类的详细解释: 1. **不可变性**:String对象的...

    java学习笔记

    本文档是一份Java学习笔记,主要涵盖了Java的基础知识,特别是关于Java集合框架的重要内容。 首先,Java集合框架是Java编程中不可或缺的部分,它包括了多种数据结构,如List、Set和Map,方便开发者存储和管理数据。...

    Java学习笔记,面向对象深化

    因此,所有Java对象都有`Object`类提供的方法,如`toString()`、`equals()`和`hashCode()`。 5. **`toString()`方法**: - `Object`类的`toString()`方法返回类名加`@`加16进制的哈希码。在打印或连接对象时,默认...

    Java学习笔记

    ### Java学习笔记 #### 1. 注释尽可能全面 在编写Java程序时,注释的重要性不言而喻。良好的注释习惯不仅可以帮助他人快速理解代码逻辑,也方便未来的代码维护。对于方法的注释,应该包含详细的参数描述、返回值...

    effectiveJava的笔记

    7. **重写equals()和hashCode()**:遵循`equals()`和`hashCode()`合同,确保一致性并避免常见的陷阱,如不考虑null值。 8. **异常处理**:提倡使用受检异常(checked exceptions)和非受检异常(unchecked ...

    java快速学习笔记(已有基础)

    对于已经有其他高级语言如C++或JavaScript基础的人来说,学习Java主要在于理解和掌握它与其他语言的不同之处,特别是在集合类和线程管理方面。 1. **类型转换**: - Java中基本类型与String之间的转换是常见的操作...

    java学习笔记(二)

    覆写`equals`方法是为了比较两个对象是否相等,通常在重写`equals`时,也需要考虑覆写`hashCode`方法以保持一致性。 总的来说,本篇笔记涵盖了Java面向对象编程的基础知识,包括类和对象的定义、方法的创建、对象的...

    JAVA学习笔记第十二天示例代码

    在JAVA学习过程中,第十二天的内容主要聚焦于Object类、Date类、Calendar类以及时间的格式化显示。这些是Java编程基础中的重要组成部分,对于理解面向对象编程和时间处理至关重要。 首先,Object类是所有Java类的根...

    学习笔记 java\CoreJava笔记\CoreJava_day11

    CoreJava_day11的学习笔记主要涵盖了集合框架,特别是关于List、Set和Map接口,以及ArrayList、Vector和LinkedList等具体实现类的知识点。 首先,集合框架是用来存放对象的对象,它提供了一组接口和类,使得我们...

    学习笔记java\CoreJava笔记\CoreJava_day08

    在Core Java的学习中,理解并熟练掌握访问权限对于编写安全、健壮的代码至关重要。以下是对不同访问权限的详细解释: 1. **public**: - 公共访问权限允许任何包内外的类访问。如果一个成员(如方法或字段)被声明...

Global site tag (gtag.js) - Google Analytics