`
sokoo108
  • 浏览: 1121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Why does Java's hashCode() in String use 31 as a multiplier?

阅读更多
Why does Java's hashCode() in String use 31 as a multiplier?
In Java, the hash code for a String object is computed as

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation.

Why is 31 used as a multiplier?

I understand that the multiplier should be a relatively large prime number. So why not 29, or 37, or even 97?

Answers:
According to Joshua Bloch's Effective Java (a book that can't be recommended enough, and which I bought thanks to continual mentions on stackoverflow):

    The value 31 was chosen because it is an odd prime. If it were even and the multiplication overflowed, information would be lost, as multiplication by 2 is equivalent to shifting. The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance: 31 * i == (i << 5) - i. Modern VMs do this sort of optimization automatically.

(from Chapter 3, Item 9: Always override hashcode when you override equals, page 48)

URL: http://stackoverflow.com/questions/299304/why-does-javas-hashcode-in-string-use-31-as-a-multiplier
分享到:
评论

相关推荐

    java中Hashcode的作用.docx

    "Java中Hashcode的作用" Hashcode是Java编程语言中一个非常重要的概念,它在equals方法中扮演着关键角色。在Java中,每个对象都具有一个独特的Hashcode,它可以用来标识对象的身份。但是Hashcode是什么?它是如何...

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

    在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...

    string-hashcode:java.lang.String.hashCode

    安装npm install string-hashcode 例子var hashCode = require ( 'string-hashcode' ) ;var s = 'abc' ;console . log ( s . hashCode ) ; // undefinedvar code = hashCode ( s ) ;console . log ( s . hashCode ) ...

    java 中HashCode重复的可能性

    Java 中HashCode重复的可能性 Java 中的 HashCode 重复可能性是 Java 开发中一个常见的问题。 HashCode 是 Java 中一个重要的概念,它用于标识对象的唯一性。然而,Hash Code 有可能重复,这会导致程序出错。下面...

    Java_重写equals()和hashCode()

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

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

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

    javascript中实现兼容JAVA的hashCode算法代码分享

    Java中String类的hashCode方法采用特定的算法,即:初始时,哈希码值为0,然后以字符为单位,对于字符串中的每一个字符,都使用31乘以当前哈希码,然后加上当前字符的ASCII值,然后更新哈希码。 2. **JavaScript中...

    深入理解Java中HashCode方法

    hashCode方法的实现方式有多种,String类的hashCode方法就是一个典型的例子,它使用数学表达式s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1]来计算hashCode值,其中s[i]是字符串的第i个字符,n是字符串的长度。...

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

    ### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...

    JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)

    ### Java 高级特性详解 #### 一、`hashCode` `hashCode` 方法是 `Object` 类中的一个方法,用于返回对象的哈希码值。在 Java 中,哈希码经常被用于实现散列表(如 `HashMap` 和 `HashSet`)。为了确保散列表的正确...

    java中hashcode和equals的详解.pdf

    Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...

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

    在Java编程语言中,ArrayList和HashSet是两种常用的集合类,它们各自有其特性和应用场景。在实际开发中,理解它们的差异以及如何有效地利用它们是非常重要的。本篇将深入探讨ArrayList与HashSet的区别,并分析...

    练习JAVA语句中的String

    在Java编程语言中,`String`类是使用最广泛的类之一,主要用来处理文本字符串。字符串在Java中被视为不可变对象,这意味着一旦创建了一个`String`对象,就不能更改它的值。下面我们将深入探讨`String`类的一些关键...

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

    ### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`与`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...

    java中的String类常用方法解析(一)

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...

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

    有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...

    Java中hashCode的作用

    以下是关于HashCode的官方文档定义:  hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。  hashCode 的常规协定是:  在Java应用程序执行期间...

    Java 中HashCode作用_动力节点Java学院整理

    Java 中 HashCode 作用 HashCode 在 Java 中扮演着非常重要的角色,它对于一个对象的重要性不言而喻。本文将详细介绍 HashCode 的作用和重要性,为读者提供一个深入了解 HashCode 的机会。 HashCode 的作用 在 ...

Global site tag (gtag.js) - Google Analytics