`
darrenzhu
  • 浏览: 804592 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为什么计算HashCode时通常选择31这个数?

阅读更多
摘自http://www.importnew.com/22083.html 第16个问题
为什么通常选择31这个数?
选择31是因为可以用移位和减法运算来代替乘法,从而得到更好的性能。说到这里你可能已经想到了:31 * num 等价于(num << 5) – num,左移5位相当于乘以2的5次方再减去自身就相当于乘以31,现在的VM都能自动完成这个优化。
分享到:
评论

相关推荐

    深入 HashCode 方法~

    - `Hashtable` 在计算 `HashCode` 时,会将 `HashCode` 的值与 `0x7FFFFFFF` 进行按位与操作,以确保结果为正整数。 - 进一步地,计算出的 `HashCode` 会通过模运算 `% hs.length` 来确定实际的数组索引位置。 4....

    hashcode的作用

    在Java中,`hashCode()` 方法是 `Object` 类的一个重要成员方法,它返回一个整数,这个整数通常用来表示对象的哈希值。哈希值在Java集合框架中扮演着至关重要的角色,尤其是在散列表(如 `HashMap` 和 `Hashtable`)...

    深入HashCode

    `hashCode()`的主要目的是为对象提供一种唯一的标识,这个标识可以快速地与其他对象进行比较。在哈希表中,`hashCode()`被用来计算对象存储的位置,因为哈希表通过对象的哈希值来确定其存储位置,从而实现快速查找。...

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

    这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确比较时,通常需要重写这些方法。以下是对`equals()` 和 `hashCode()` 方法的详细解释及其重写的重要性。 **1. ...

    hashCode的作用

    例如,在`HashSet`中,当添加一个新的元素时,会先计算其`hashCode`值,然后将该元素放入对应的桶中。如果两个对象的`hashCode`相同,则会进一步调用`equals`方法来判断这两个对象是否相等,避免重复插入相同的元素...

    Java_重写equals()和hashCode()

    这就是为什么在设计类时,重写这两个方法是至关重要的,尤其是在实现集合类的元素或键值对时。 总之,理解并正确重写 `equals()` 和 `hashCode()` 方法对于编写高质量的Java代码至关重要,这直接影响到对象比较的...

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

    这个问题在处理自定义类对象时尤为关键,特别是当这些对象包含可变元素,如字符集合时。 首先,让我们理解这两个方法的基本概念: 1. **hashCode()**:这个方法是Object类中的,返回一个整数值,代表对象的哈希码...

    利用反射绕过编译器和hashcode高级应用

    例如,如果对象在生命周期中不会改变,那么我们可以在对象创建时计算一次哈希码并存储起来。 4. 哈希码的性能:虽然哈希码的主要目的是用于哈希表,但在其他场合,比如比较大量对象的相似性时,快速计算哈希码也能...

    hashcode与eqault比较

    通常情况下,先通过`hashCode`值进行初步筛选可以显著提高性能,因为计算`hashCode`值比调用`equals`方法更快。 #### 四、案例分析 假设有一个类`Person`,包含`name`和`age`两个属性: ```java public class ...

    equals,hashcode,toString

    当两个对象通过`equals()`方法判断为相等时,它们的`hashCode()`方法返回值也应该相等。反之,如果两个对象不相等,它们的哈希码应该尽可能不同,以减少哈希冲突的概率。因此,重写`equals()`时,通常也需要重写`...

    深入HashCode方法

    因此,选择哪些属性参与哈希计算,以及如何组合这些属性以生成唯一的HashCode,是衡量一个程序员专业技能的重要指标。 总的来说,深入理解并恰当使用HashCode方法对于优化Java程序的性能至关重要,特别是在处理大量...

    java中hashcode()和equals()的详解

    `hashCode()`方法则与`equals()`密切相关,它返回一个整数值,代表对象的哈希码,这个值是基于对象的特定状态计算出来的。在哈希表中,对象通过其哈希码快速定位。如果两个对象根据`equals()`方法判断相等,那么它们...

    Java基础加强_ArrayList_HashSet的比较及Hashcode分析

    HashSet在插入新元素时会计算其Hashcode,根据Hashcode将元素放入哈希表的特定位置,以达到快速查找的目的。当两个对象的Hashcode相同,HashSet会调用equals()方法进一步判断它们是否真的相等。 Hashcode是一个关键...

    Java中equals,hashcode和==的区别

    通常情况下,hashcode 方法需要和 equals 方法一起使用,以确保两个对象的散列码相同,如果它们的内容相同。 例如,在 HashSet 中,我们可以使用 hashcode 方法来比较两个对象是否相同。如果两个对象的散列码相同,...

    java 序列化和重写 hashCode 的原因

    这两个方法在Java中的`Object`类中定义,但为了正确地比较对象并处理集合(如HashSet或HashMap)时,通常需要重写它们。`equals`方法用于比较两个对象是否相等,而`hashCode`方法返回对象的一个整数值,用于在哈希表...

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

    在这个例子中,`equals()`方法基于`name`和`age`属性来判断两个`Person`对象是否相等,而`hashCode()`方法也考虑到了这两个属性,以确保当两个对象相等时,它们的哈希码也相同。 #### 总结 `hashCode()`和`equals()...

    复写hashCode()方法,和equasl()方法

    反之,如果两个对象的`hashCode()`值相同,则还需要进一步通过`equals()`方法来确定这两个对象是否真正相等。 #### 实现细节 在上面的代码示例中,`Person1`类重写了`hashCode()`方法: ```java public int ...

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

    `hashCode()` 的作用是为对象生成一个唯一的整数值,这个值通常被用来快速定位对象在哈希表(如 `HashSet` 或 `HashMap`)中的位置。`hashCode()` 的设计必须满足以下条件: 1. 相等的对象必须具有相同的哈希码:...

    hashcode()和equals()

    在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 或 `HashSet`)时。这两个方法来源于 `Object` 类,是所有Java类的基类,因此,每个自定义类...

    hashcode和equals的分析

    简单来说,哈希算法就是将输入数据转换为一个特定的数值,这个数值通常被称为哈希值或哈希码。在Java中,`hashCode`方法实现的就是这样的哈希算法。 #### 1.2 `hashCode`方法的实际应用 当向`Set`集合添加元素时,...

Global site tag (gtag.js) - Google Analytics