`
lingqi1818
  • 浏览: 253429 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hashMap算法的实现

阅读更多
   昨天项目发布间隙,看了下hashmap的算法。关键在于:
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);
}


         和
static int indexFor(int h, int length) {
        return h & (length-1);
}

这2个方法。
注意,这2个方法一定要配合使用,否则就比较难理解了。

这里我解答几个问题,
1. hash方法里传入的是对象的hashCode,而对象的hashCode是对象的内存地址,已经保证了唯一性,为什么还要再进行hash计算?
回答:由于hash表的大小有限,不可能无限大,以hashmap实现中的indexFor方法来讲,是以与操作来计算的。那么假如hashCode转换成二进制以后,末尾相同的话,
那么计算出来的index也就一样了,造成散列度不够。

2. indexFor方法为什么针对length-1做与操作?
回答:与操作将会把超出数组长度的部分截断,另外map初始化的时候会做如下操作:
while (capacity < initialCapacity)
            capacity <<= 1;
这样,length肯定为2的N次方,好处是length-1转换成2进制每一位都是1,在做&操作的时候每一个坑都有机会得到值,否则假如有1位为0的情况,那一位就会浪费。
  

    3.我这里对hash函数有个疑问,这个算法的目的是把原始数据分成3断进行异或操作达到散列,但是我感觉最后结果的前4位是不会发生变。假如有数据前4位不一样,刚好hash表的长度是后面的28位,那么这个时候就会出现hash冲突了。不知道我这个理解对不对,请大家指正,谢谢。
分享到:
评论

相关推荐

    java利用DFA算法实现敏感词过滤功能

    ### 三、DFA算法实现敏感词过滤 #### 第一步:敏感词库初始化 在Java中,我们可以使用HashMap存储敏感词库。首先,将所有敏感词从数据库或列表加载到HashSet中,以去除重复项。接着,将HashSet中的敏感词添加到...

    java 集合和泛型 1. Map接口 2. HashMap底层实现 3. Hash数据结构和算法 4. 红黑树数据结构和算法

    java 集合和泛型 1. Map接口 2. HashMap底层实现 3. Hash数据结构和算法 4. 红黑树数据结构和算法

    树tree、动态数组dyArray、hashMap、拼图算法.zip

    本压缩包文件涵盖了四个关键概念:树(Tree)、动态数组(Dynamic Array)、哈希映射(HashMap)以及拼图算法(Puzzle Algorithm)。接下来,我们将详细探讨这些知识点。 1. **树(Tree)**: 树是一种非线性的...

    HashMap的实现原理

    总结来说,HashMap的实现原理结合了哈希表、链表和红黑树,通过高效的哈希算法和扩容策略来确保高效的数据存取。然而,由于HashMap的非线程安全特性,开发者在多线程环境中应考虑使用`ConcurrentHashMap`等线程安全...

    用hashmap实现词典查询

    本话题主要关注如何利用HashMap这一数据结构来实现词典查询,以提供快速、便捷的字典服务。HashMap是Java编程语言中的一种内置数据结构,它提供了O(1)的平均时间复杂度来执行查找、插入和删除操作,这使得它成为构建...

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap是Java中常用的一种数据结构,它基于哈希表实现,提供快速的键值对存储和检索。HashMap的核心原理是通过散列函数将键对象转换为哈希码,然后使用这个哈希码来确定键值对在内部数组中的位置。哈希函数的设计...

    HashMap底层实现原理共6页.pdf.zip

    HashMap在Java中的实现原理主要包括数组和链表两种数据结构的结合,以及对哈希算法的应用。 1. 哈希表基础 HashMap的核心是一个动态调整大小的哈希表,也称为散列表。哈希表通过将键(key)转换为一个哈希码(hash ...

    FP树增长算法的java实现

    使用Java的集合框架,如ArrayList和HashMap,可以方便地实现这些数据结构和操作。 在提供的`fpgrowth`文件中,可能包含了FP树算法的具体Java实现代码,包括类定义、方法实现以及可能的数据示例。通过阅读和理解这段...

    hashmap面试题_hashmap_

    HashMap作为Java集合框架中的重要成员,是面试中常见的知识点,尤其在数据结构与算法、并发编程以及JVM内存管理等领域,HashMap的深入理解至关重要。本篇将围绕HashMap的相关面试题,从基础概念到高级应用进行详尽...

    学习笔记:三数组实现的HashMap

    "学习笔记:三数组实现的HashMap"这篇博客文章可能讨论了一种非标准但有趣的HashMap实现,使用了三个数组来代替标准的哈希表结构。这里我们将深入探讨这种三数组实现HashMap的原理和可能的优势。 1. **基本概念**:...

    Javascript实现和操作HashMap

    虽然JavaScript原生的`Map`对象提供了类似的功能,但在某些场景下,开发者可能需要自定义HashMap来满足特定的需求,例如优化性能或者实现特定的算法。本篇文章将深入探讨如何在JavaScript中实现HashMap以及如何进行...

    Java HashMap类详解

    本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,虽然...

    A*算法Java/C++实现

    A*(A-star)算法是一种广泛应用的路径搜索算法,它结合了最佳优先搜索和Dijkstra算法的优点,通过引入启发式信息来实现更高效的路径搜索。在这个“A*算法Java/C++实现”的项目中,我们将深入探讨A*算法的核心原理...

    简单的QQ聊天程序,用hashmap实现信息的存储

    【QQ聊天程序与HashMap实现的信息存储】 QQ,作为一款广受欢迎的即时通讯软件,它的核心功能是实现用户之间的快速、实时通信。在这个简单的QQ聊天程序中,开发者利用了HashMap这一数据结构来存储和管理信息,以实现...

    TFIDF算法 java实现

    #### 三、算法实现 以下是对给定代码片段的部分解读及补充: ```java package tfidf; import java.io.*; import java.util.*; public class ReadFiles { private static List&lt;String&gt; fileList = new ArrayList...

    Java实现LRU算法.zip

    在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...

    ahocorasick:使用Java中的Hashmap轻松实现多模式字符串匹配算法(AhoCorasick)

    Ahocorasick 使用Java中的Hashmap轻松实现多模式字符串匹配算法(AhoCorasick) 该项目是使用带有Java SE的eclipse完成的。 要使用它,只需将其导入到Eclipse中即可。 项目状态:完成

    页面算法模拟(java实现)

    在这个Java实现的项目中,我们将探讨两种主要的页面替换算法:FIFO(先进先出)和LRU(最近最少使用)。这两种算法都是为了解决虚拟存储系统中的缓存问题,即如何决定哪些页面应该被替换到磁盘,以便为新的或已修改...

    HashMap介绍和使用

    HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。所有的复杂数据结构都可以基于这两种基本结构构建出来,...

Global site tag (gtag.js) - Google Analytics