`
liu0107613
  • 浏览: 74565 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Java String中的hashCode函数

    博客分类:
  • java
阅读更多

String 类中的hash函数如下:

    public int hashCode() {
 int h = hash;
 if (h == 0) {
     int off = offset;
     char val[] = value;
     int len = count;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }

 

 

具体的计算公式是:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

 

 

上面的代码可见简洁和高效。JDK的源代码。

 

这个hash算法的名称叫:BKDR Hash Function

 

This hash function comes from Brian Kernighan and Dennis Ritchie's book "The C Programming Language". It is a simple hash function using a strange set of possible seeds which all constitute a pattern of 31....31...31 etc, it seems to be very similar to the DJB hash function.

 

算法来自于Brian Kernighan and Dennis Ritchie合著的C语言编程一书。函数用一个特殊的种子集合构建哈希函数

 

该算法代码:

   public long BKDRHash(String str)
   {
      long seed = 131; // 31 131 1313 13131 131313 etc..
      long hash = 0;

      for(int i = 0; i < str.length(); i++)
      {
         hash = (hash * seed) + str.charAt(i);
      }

      return hash;
   }
   /* End Of BKDR Hash Function */

 

参考路径:http://www.partow.net/programming/hashfunctions/index.html

 

 

 

 

分享到:
评论

相关推荐

    深入理解Java中HashCode方法

    3. 一个好的hashCode函数应该将不同的对象分布到所有可能的hashCode值上,以避免哈希碰撞。 在Java中,hashCode方法的实现方式有多种,例如,使用String类的hashCode方法,使用数学表达式来计算hashCode值。同时,...

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

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

    java常用char,string函数

    ### Java中的Char与String函数详解 #### 一、概述 在Java编程语言中,`char`类型用于表示单个字符,而`String`类则用于处理字符串数据。这两种类型是进行文本处理时不可或缺的基础工具。本文将详细介绍Java中与`...

    char,string全部函数方法说明

    总之,`char`和`String`在Java中扮演着重要角色,它们提供的丰富函数方法使得处理文本数据变得简单高效。理解和熟练使用这些方法是Java编程的基本功,对于开发涉及文本处理的应用尤其关键。通过深入学习和实践,...

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

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

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

    `hashCode` 方法是 `Object` 类中的一个方法,用于返回对象的哈希码值。在 Java 中,哈希码经常被用于实现散列表(如 `HashMap` 和 `HashSet`)。为了确保散列表的正确性,重写 `equals` 方法时,通常也需要重写 `...

    全排列的Hash函数(JAVA)

    - 在`processCurrentPermutation`函数中,可以使用自定义的Hash函数将当前排列转换为一个键,并存入哈希表(如HashMap)。 - 如果发现哈希表中已有相同的键,则说明已生成过该排列,可以直接跳过;否则,将该排列...

    java 中函数的参数传递详细介绍

    在`changeString(String str)`函数中,虽然看起来`str`的值被修改了,但实际上原始的`str1`并没有变化,只是`str2`指向了一个新的对象。 ```java public static String changeString(String str) { System.out....

    Java中String类的方法及说明.doc

    在Java编程语言中,String类是一个非常基础且重要的类,它代表不可变的字符序列。String类提供了多种方法,使得开发者能够方便地处理字符串。以下是对标题和描述中提到的Java String类方法的详细说明: 1. **构造...

    获取字符串的哈希-JavaScript开发

    与Java的String#hashCode()类似。 安装$ npm install @ sindresorhus / string-hash用法const stringHash string-hash获取字符串的哈希值使用非加密哈希函数FNV-1a。 与Java的String#hashCode()类似。 安装$ ...

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

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...

    java二开面试笔试题

    本资源摘要信息中,我们将总结 Java 面试笔试题中的知识点,涵盖 Java 基础、Java 集合框架、Java垃圾回收、Java 方法返回值、Java 对象引用、Java 构造函数执行顺序等方面的知识点。 一、Java 基础知识点 1. Java...

    java中equals()函数的用法 equals和==的区别

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...

    hashcode的作用

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

    java函数速查中文版

    Java函数速查中文版是一个非常实用的工具,尤其对于初学者和正在开发Java项目的程序员来说,它提供了方便快捷的方式来查找和理解Java API中的各种函数。这个资源以HTML格式呈现,易于阅读和搜索,使得在学习和工作中...

    javahashcode()和equals()和==的介绍和区别.pdf

    在Java编程中,`hashCode()`、`equals()`以及`==`是三个经常被提及的概念,它们在处理对象的比较和存储时起着关键作用。本文将深入探讨这三个概念的介绍、区别以及它们在Java对象比较中的应用。 首先,`hashCode()`...

    从DELPHI到JAVA转换.docx

    需要注意的是,在Java中,Key/Value存储需要提供hashCode函数和equals函数。 5. 多线程同步 在Java中,多线程同步使用Collections.synchronizedCollection方法,例如:`Collection c = Collections....

    java_JDK_ API_函数大全(中文电子书)(35.1M)

    1. **基础类库**:如Object类、String类、Arrays类,这些是Java编程的基础,书中会详细介绍它们的各种方法,如equals()、hashCode()、substring()等。 2. **集合框架**:包括List、Set、Map等接口以及ArrayList、...

    java string类的常用方法详细介绍

    Java中的String类是编程中最常用的类之一,它用于表示不可变的字符序列。在Java中,字符串被视为对象,因此我们可以通过调用String类的各种方法来处理字符串。以下是一些常用的String类方法的详细说明: 1. 构造...

Global site tag (gtag.js) - Google Analytics