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

Java hashMap的 Hash函数

阅读更多

在教科书提到的Hash函数就是求模了。Java的hash函数是怎样的呢?先看代码:

 /**
     * Applies a supplemental hash function to a given hashCode, which
     * defends against poor quality hash functions.  This is critical
     * because HashMap uses power-of-two length hash tables, that
     * otherwise encounter collisions for hashCodes that do not differ
     * in lower bits. Note: Null keys always map to hash 0, thus index 0.
     */
static int hash(int h) {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }

    /**
     * Returns index for hash code h.
     */
  static int indexFor(int h, int length) {
        return h & (length-1);
 }

 hash对一个对象的hashCode进行重新计算,而IndexFor生成这个对象的index。

hash值重新计算,是为了防止质量低下的hashCode()函数实现。在hashMap数组长度中长度是初始长度的2倍。通过右移造成地位的数据尽量的不同。

 

而 在计算index上使用的是h&(length-1)的方法。简单而效率高。

 

看了Java的代码,自己在设计hash函数的时候,就有选择了。尽量使用位运算符,少使用+-*/%的运算符,这样可以提高hash的效率。

1
0
分享到:
评论

相关推荐

    hashmap中hash函数的构造问题

    ### HashMap中的Hash函数构造问题详解 #### 一、引言 在Java中,`HashMap`是一种非常常用的集合类,它提供了基于键值对的数据存储方式。`HashMap`内部使用哈希表来存储数据,其中最关键的部分就是哈希函数的设计。...

    全排列的Hash函数(JAVA)

    标题中的“全排列的Hash函数(JAVA)”指的是在Java编程中使用Hash函数处理全排列问题。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来的所有可能的排列方式。在这个场景下,Hash函数通常用于快速查找...

    java中HashMap详解.pdf

    Java中的HashMap是一种基于散列机制的Map接口的实现,它允许我们存储键值对。键是唯一的,而值可以重复。HashMap在处理数据时非常高效,因为其操作的时间复杂度接近于O(1)。这是通过使用散列函数将键映射到相应的...

    自定义map实现java的hashmap

    在Java编程中,HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的存储功能,具有快速存取和高效查找的特点。HashMap基于哈希表(也称为散列表)原理,通过键对象的哈希码来定位元素,进而实现O(1)...

    哈希计算工具 java-hash.7z

    在Java中,常见的哈希函数有MD5(Message-Digest Algorithm 5)、SHA-1(Secure Hash Algorithm 1)、SHA-256等。这些算法都具有不同的安全性和效率特性。 2. **MD5**: MD5是一种广泛使用的哈希函数,生成32位的...

    深入理解Java之HashMap —— 03

    总结来说,HashMap在Java中的实现是高效且灵活的,通过合理的构造函数、哈希函数、扩容策略和冲突解决方法,提供了快速访问和操作键值对的能力。理解这些内部机制有助于在实际编程中更好地利用HashMap,并优化代码...

    Java基础-模拟HashMap集合(基于数组和链表) 数组和链表.pdf

    HashMap的实现基于Hash函数和链表,通过Hash函数将键转换为索引,然后将对应的值存储在链表中。 模拟HashMap的实现 我们将使用Java语言来模拟HashMap的实现。首先,我们需要定义一个接口MyMap,用于描述HashMap的...

    uthash开源的hash函数实现

    在 C 语言中,由于没有内置的数据结构如 Python 的字典或 Java 的 HashMap,因此开发人员通常需要自己实现类似的数据结构。UTHASH 提供了一个简洁的解决方案,通过包含 "uthash.h",你可以为自定义的结构体添加哈希...

    java中HashMap详解

    HashMap内部基于哈希表(Hash Table)实现,利用哈希函数将键映射到一个特定的位置,以便快速查找和插入元素。以下是HashMap的详细解析: 1. **哈希表的定义**: 哈希表,又称散列表,是一种数据结构,通过哈希...

    java中hashmap容量的初始化实现

    `threshold = loadFactor * capacity`在元素个数超过临界值的情况下,随着元素的不断增加,HashMap就会发生扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,这一操作需要消耗大量资源,是非常影响性能...

    java课件-HashMap

    HashMap的工作原理基于哈希函数,当我们将一个键值对放入HashMap时,哈希函数会将键(key)转换为一个哈希码(hash code),这个哈希码决定了键值对在HashMap中的存储位置。如果两个键的哈希码相同,它们会被放到同...

    Java源码解析HashMap的resize函数

    Java源码解析HashMap的resize函数 HashMap的resize函数是Java中HashMap实现的关键部分之一,该函数用于对HashMap初始化或者扩容。下面将详细解析该函数的实现机理和源码。 resize函数的作用 resize函数的主要作用...

    java源码:哈希计算工具 java-hash.7z

    在Java中,常见的哈希函数有`java.util.HashMap`和`java.security.MessageDigest`等。 1. **HashMap**: 是Java集合框架中的一个重要类,它实现了Map接口。HashMap使用哈希表来存储键值对,通过键的哈希值快速定位到...

    深入Java集合学习系列:HashMap的实现原理

    这个过程由`hash()`方法实现,它首先计算键对象的哈希值,然后通过一个扰动函数来减少哈希冲突的可能性。 哈希冲突是不可避免的,HashMap使用链地址法来解决这个问题。如果两个键的哈希值相同,它们会被放在数组的...

    Hashmap详解

    HashMap 使用一个 hash 函数来计算 Hash 码,该函数是一个纯粹的数学计算。hash 函数将键的 hashCode 值作为输入,并返回一个 Hash 码。 indexFor 方法 indexFor 方法是用于计算键值对在数组中的索引的方法。该...

    基于java的哈希计算工具 java-hash.zip

    除了`MessageDigest`,Java还提供了`java.util.hashMap`和`java.util.HashMap`类,它们是基于哈希表的数据结构,用于实现高效的键值对存储。哈希表通过哈希函数将键映射到数组的索引位置,从而实现快速的查找、插入...

    HashMap-master.zip_hash

    标题"HashMap-master.zip_hash"可能指的是一个关于HashMap实现或优化的项目,其中包含了哈希函数的设计和分析。 哈希表的核心思想是通过哈希函数将键(Key)映射到数组的特定位置,使得我们能够以近乎常数的时间...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...

    基于Java的实例源码-哈希计算工具 Java-hash.zip

    例如,`java.util.HashMap`和`java.util.HashSet`使用了哈希函数来快速查找和存储元素。此外,`java.security.MessageDigest`类提供了对各种哈希算法的支持,如MD5(Message-Digest Algorithm 5)、SHA-1(Secure ...

Global site tag (gtag.js) - Google Analytics