`
hsyzijvaa
  • 浏览: 111779 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

hashcode 重写

阅读更多

    一般hashcode重写都采用了31作为因子

如以下源码
  @Override
  public int hashCode() {
    if (!dirty) {
      return hashCode;
    }
    int result = Arrays.hashCode(pattern);
    result = 31 * result + Longs.hashCode(support);
    result = 31 * result + length;
    hashCode = result;
    return result;
  }


首先31是一个奇数,乘或异或不太重复,分散效果好
其次31有计算优势,31 * i == 32 * i - i == (i << 5) - i.
将乘法转成移位和减法,提高了计算效率。
 
0
1
分享到:
评论

相关推荐

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

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

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

    如果你只重写了 `equals()` 而不重写 `hashCode()`,可能会导致无法正确地将对象添加到集合或从集合中查找对象。例如,在HashMap中,如果两个键通过 `equals()` 方法判断为相等,但它们的哈希码不同,那么HashMap会...

    Java_重写equals()和hashCode()

    当同时重写 `equals()` 和 `hashCode()` 时,需要注意的一点是,如果 `equals()` 返回true,那么两个对象的 `hashCode()` 必须相等。反之则不一定,因为不同的对象可能会产生相同的哈希码。这就是为什么在设计类时,...

    重写hashCode()和equals()方法详细介绍

    如果我们重写了`equals()`方法来基于`name`和`age`判断两个`Coder`对象是否相等,那么我们也应该重写`hashCode()`,使具有相同`name`和`age`的`Coder`对象产生相同的哈希码。通常,`hashCode()`的实现会结合所有参与...

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

    在使用 `HashSet`、`HashMap` 等数据结构时,如果重写了 `equals()` 方法但没有重写 `hashCode()` 方法,可能会导致预期的行为不一致。因为这些数据结构依赖于 `hashCode()` 来确定对象的存储位置,而 `equals()` 来...

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

    关于重写equals、hashcode以及compareTo方法! equals()方法是Object类中的一个方法,它用于比较两个对象是否相等。然而,它的默认实现是比较对象的引用(地址),而不是比较对象的实际内容。因此,在某些情况下,...

    java 序列化和重写 hashCode 的原因

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

    HashCode的用法详解

    如果我们不重写 hashCode(),那么对象的 hashCode 将会默认使用 Object 类中的 hashCode 方法,这样将会导致对象的存储位置不确定。 例如,如果我们有两个对象,它们的 hashCode 都是 1,那么它们将会被存放在同一...

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

    如果我们只重写了 `equals()`,但没重写 `hashCode()`,当将这些对象用作 `HashMap` 的键时,可能会遇到问题。例如,两个内容相同但 `hashCode()` 不同的 `String` 对象会被存储在哈希表的不同位置,导致预期的覆盖...

    深入 HashCode 方法~

    - 因此,在重写 `hashCode()` 方法的同时,也应重写 `equals()` 方法,以保持一致性。 2. **HashCode 的随机性与分布**: - `HashCode` 的设计应尽可能均匀分布,以减少哈希冲突。 - 通过结合多个关键属性来计算...

    为什么重写equals方法,还必须要重写hashcode方法

    为什么重写equals方法,还必须要重写hashcode方法

    why在重写equals时还必须重写hashcode方法分享

    如果我们只重写了 `equals()` 来比较姓名和年龄,而没有重写 `hashCode()`,那么即使两个 `Person` 实例具有相同的姓名和年龄,它们在哈希表中的位置也可能不同,导致不必要的比较和潜在的性能问题。 总结来说,...

    Java 之路(一)cmd

    4. 经典面试题:涵盖了Java中的核心知识点,如equals和hashCode重写、==与equals的区别、final关键字的使用、集合类的介绍以及ArrayList与LinkedList的区别。 5. 学习资源推荐:包括视频教程、在线文档、IDEA教程、...

    java中为何重写equals时必须重写hashCode方法详解

    当我们在自定义类中重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,这是为了遵循一些重要的原则和保证数据结构如 `HashMap`、`HashSet` 的正确行为。 首先,`equals()` 方法用于比较两个对象是否相等...

    完整代码分页(模糊、精确、普通).docx里面记录了完整代码 直接使用即可

    #### HashCode重写 - `Bank`类中重写了`hashCode`方法,这在实体类比较时非常重要,确保对象的正确识别。 - `hashCode`方法中使用了一个质数(31)来提高散列码的分布均匀性,这对于哈希表等数据结构来说是非常重要的...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...

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

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

    为什么在重写 equals方法的同时必须重写 hashcode方法

    因此,为了保证对象在集合中的正确行为,当重写 `equals` 方法时,必须同时重写 `hashCode` 方法,确保相等的对象具有相同的哈希值。这样,集合可以正确地识别和处理相等的对象,避免数据一致性问题。同时,遵循这个...

    如何在IDEA中对 hashCode()和 equals() 利用快捷键快速进行方法重写

    IntelliJ IDEA,作为一款强大的Java集成开发环境,提供了便捷的快捷键功能来帮助开发者快速重写`hashCode()`和`equals()`。 在IDEA中,如果你需要对一个类(比如`Student`类)重写这两个方法,可以遵循以下步骤: ...

Global site tag (gtag.js) - Google Analytics