`

equals()和hashcode()总结(一)

阅读更多
1、任何class如果覆写了equals()方法,就必须覆写hashCode()。

2. map是根据equals()和hashCode()来判断对象是否相等,所以在类里覆写了equals(),就一定要覆写hashCode()。
   关于Hashtable,判断key是否相同的条件是:hashCode()相同 && 满足equals(),而一个类如果没有覆写equals()方法,
   那么这个类的equals方法比较的是对象的内存地址。如果没有覆写HashCode,那么该类的hashCode是通过对象的内存地址转换而来.

3. 在程序执行期间,同一个对象调用hashCode()必须返回同一个值(同一个应用执行期)。
   散列码不必是独一无二的(应该更关注生成速度,而不是唯一性),但是通过hashCode()和equals(),
   必须完全能够确定对象。

4. 如果两个对象equals,那么他们的hashCode()必须相等。

5. Map.put(key,value)时根据key.hashCode生成一个内部hash值,根据这个hash值将对象存放在一个table中。
   Map.get(key)会比较key.hashCode和equals方法,当且仅当这两者相等时,才能正确定位到table;
   java中Set是通过Map实现的,所以Map和Set的所有实现类都要注意这一点.

6. 如果想判断是否两个对象引用指向同一个实体,唯一的正确途径是使用==,因为只有它不会被重构,要慎用hashCode。

7. 有一点我们应该是能够确认的,就是同样的数字转换成hashCode后的值肯定一样,
   因此我们在覆写hashCode时候应该利用自己编写的类独特属性进行hashCode运算(当然不仅仅是一个属性,可以是多个属性),
   这样我们就可以尽量的保证每个类对象的具有不同的hashCode,如果这些不同的对象有机会进入同一个map的时候就可以保证其hashCode不一样,
   从而提高map的检索。

8. 有关hashCode()计算
   
   boolean                                    c=(f ? 0 : 1)

   byte,char,short, int                       c=(int)f

   long                                       c=(int)(f^(f>>>32))

   float                                      c=Float.floatToIntBits(f);

   double                                     long l = Double.doubleToLongBits(f);
                                              c=(int)(l^(l>>>32))

   Object                                     c=f.hashCode()

//
int f = 17;
result = 37*result + c;
1
2
分享到:
评论

相关推荐

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

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

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

    总结来说,`equals()` 和 `hashCode()` 在实际开发中的重写是提高代码质量、确保对象比较和哈希表操作正确性的关键。开发者需要根据业务需求来定制这两个方法,确保它们遵循上述原则,并与业务逻辑保持一致。

    equals,hashcode,toString

    在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...

    Java中equals,hashcode和==的区别

    Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个运算符,用于比较两个对象的内存地址是否...

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

    本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...

    equals与hashCode方法讲解

    equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java 的 Object 类中,equals 方法...

    Java中的equals和hashCode方法详解1

    总结来说,`equals()`和`hashCode()`是Java中用于对象比较和哈希存储的关键方法。它们的正确使用和重写对于确保对象比较的逻辑性和哈希表操作的效率至关重要。在自定义类中,应根据对象的属性和业务逻辑来重写这两个...

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    equals 和 hashCode两者效果分析详解.docx

    如果一个类重写了`equals()`却没有重写`hashCode()`,可能会导致违反JavaDoc的建议,即`equals()`和`hashCode()`必须保持一致。这意味着,如果两个对象`equals()`返回`true`,那么它们的`hashCode()`也必须相同。...

    equals-hashcode-processor-1.0.0.zip

    总的来说,"equals-hashcode-processor-1.0.0"是一个实用的Scala工具库,它既解决了异步操作中可能出现的重试问题,也可能提供了对象平等性和哈希码的处理优化。通过深入学习并运用这个库,开发者可以构建出更健壮、...

    关于Object中equals方法和hashCode方法判断的分析

    下面是一个简单的示例代码,演示了如何重写 equals 和 hashCode 方法: ```java public class Person { @Override public boolean equals(Object obj) { System.out.println("判断 Person 的 equals"); return ...

    Java重写equals同时需要重写hashCode的代码说明

    Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.

    关于重写equals,hashcode以及compareTo方法!

    重写equals()、hashcode()和compareTo()方法是非常重要的,它可以使我们的程序更加高效、可靠和灵活。在实际开发中,我们需要根据具体情况来决定是否需要重写这些方法,并遵守相关的规则,以避免出现意想不到的结果...

    深入理解equals和hashCode方法

    深入理解equals和hashCode方法 equals和hashCode方法是Java中Object类提供的两个重要方法,对以后的学习有很大的帮助。本文将深入剖析这两个方法,帮助读者更好地理解和使用它们。 equals方法 equals方法是用于...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

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

    hashCode() 和 equals() 的本质区别和联系 Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和...

    Java重写equals及hashcode方法流程解析

    Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将详细地介绍Java重写equals及hashCode方法的...

    hashcode()和equals()

    下面是一个简单的例子,展示了如何重写 `equals()` 和 `hashCode()`: ```java public class Student { private String name; private int age; // 构造器、getter 和 setter 省略... @Override public ...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

Global site tag (gtag.js) - Google Analytics