`

hascode 和 equals为什么要一起重写?

 
阅读更多
hascode和equals方法要一起重写这是hashCode方法的常规协定:

在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

把对象放入hash表这种结构时会调用hashCode方法.先用hashCode方法判断要存储的位置,再用equals方法判断表中是否已经存在了一个内容相同的元素.
分享到:
评论

相关推荐

    java中hashcode()和equals()方法详解

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...

    详解Java中用于查找对象哈希码值的hashCode()函数

    在Java编程语言中,`hashCode()`函数是一个非常...正确地重写`hashCode()`和`equals()`对于保持哈希数据结构的正确性和效率至关重要。在使用自定义对象作为键时,尤其需要注意这一点,以避免哈希碰撞和不期望的行为。

    java集合知识-map、set等

    如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。 如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。 记住:如果元素要存储到HashSet集合中,必须覆盖...

    lombok-1.16.16源码和文档

      默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。 @ToString   生成toString方法,默认情况下,会输出类名、所有属性,属性会...

    CursoJava:NélioAlves的Udemy课程

    对象类别构造函数,getter,setter,toString,equals,hasCode方法; 超载; 封装; 保留字这个; 遗产; 多态性内存中对象,数组和列表的行为; 枚举; 对象的组成; 异常处理; 使用Scanner进行数据输入和读取文件...

    无Java开发Android应用

    在实际的开发过程中,开发者需要使用NDK工具链将C/C++代码编译为.so库,并通过JNI(Java Native Interface)来建立Java层和C/C++层之间的通信。当应用启动时,Android系统会加载指定的.so库,并调用预先定义好的入口...

    Aspose.Words中提取域中有效内容

    此外,`Field.HasCode`和`Field.IsLocked`等属性可以帮助你更好地控制域的行为。 在`GetFieldContent`这个例子中,可能是一个示例程序,它读取输入的Word文档,提取所有域的解析结果,并可能将这些内容输出到控制台...

    详细解读Android系统中的application标签

    - `android:icon`和`android:label`为组件提供了默认值,但组件可以有自己的图标和标签。 - `android:permission`定义了应用的基本权限,但组件可以设置更高的权限需求。 4. **应用行为的控制** - 通过`android:...

Global site tag (gtag.js) - Google Analytics