`
chenzan2010
  • 浏览: 18270 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java中HashCode的作用和Map的实现结构

阅读更多

核心提示:Map 是一种数据结构,用来实现key和value 的映射。通过Key可以找到Value。实现类包括 HashMap,LinkedHashMap,TreeMap /** * Applies a supplemental hash function to a given hashCode, which * defends against poor quality hash functions. This is cr

 

 

Map 是一种数据结构,用来实现key和value 的映射。通过Key可以找到Value。实现类包括

HashMap,LinkedHashMap,TreeMap

  1. /**  
  2.  * Applies a supplemental hash function to a given hashCode, which  
  3.  * defends against poor quality hash functions.  This is critical  
  4.  * because HashMap uses power-of-two length hash tables, that  
  5.  * otherwise encounter collisions for hashCodes that do not differ  
  6.  * in lower bits. Note: Null keys always map to hash 0, thus index 0.  
  7.  */  
  8. static int hash(int h) {   
  9.     // This function ensures that hashCodes that differ only by   
  10.     // constant multiples at each bit position have a bounded   
  11.     // number of collisions (approximately 8 at default load factor).   
  12.     h ^= (h >>> 20) ^ (h >>> 12);   
  13.     return h ^ (h >>> 7) ^ (h >>> 4);   
  14. }   
  15.   
  16. /**  
  17.  * Returns index for hash code h.  
  18.  */  
  19. static int indexFor(int h, int length) {   
  20.     return h & (length-1);   
  21. }   
  22.   
  23. /**  
  24.  * Associates the specified value with the specified key in this map.  
  25.  * If the map previously contained a mapping for the key, the old  
  26.  * value is replaced.  
  27.  *  
  28.  * @param key key with which the specified value is to be associated  
  29.  * @param value value to be associated with the specified key  
  30.  * @return the previous value associated with <tt>key</tt>, or  
  31.  *         <tt>null</tt> if there was no mapping for <tt>key</tt>.  
  32.  *         (A <tt>null</tt> return can also indicate that the map  
  33.  *         previously associated <tt>null</tt> with <tt>key</tt>.)  
  34.  */  
  35. public V put(K key, V value) {   
  36.     if (key == null)   
  37.         return putForNullKey(value);   
  38.     int hash = hash(key.hashCode());   
  39.     int i = indexFor(hash, table.length);   
  40.     for (Entry<K,V> e = table[i]; e != null; e = e.next) {   
  41.         Object k;   
  42.         if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {   
  43.             V oldValue = e.value;   
  44.             e.value = value;   
  45.             e.recordAccess(this);   
  46.             return oldValue;   
  47.         }   
  48.     }   
  49.   
  50.     modCount++;   
  51.     addEntry(hash, key, value, i);   
  52.     return null;   
  53. }   

HashMap 是以数组的结构,用哈希函数值跟数组的长度做位与运算,获取对应数组的索引。浏览key值时,不保证顺序。
LinkedHashMap 是以双向列表的结构做实现的,浏览key值时候,可以保证顺序。LinkedHashMap继承HashMap ,不同的是数据存储结构。

TreeMap 是以二叉树实现的Map接口。Map中的key值按照从小到大的顺序排列。key要实现comparable。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java中map集合的用法.doc

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于List,List是以索引来访问元素,而Map...在实际开发中,根据应用程序特定的需求,选择合适的Map实现能更好地优化数据结构和性能。

    java中map集合的用法

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构,其中每个键都是唯一的,并且与一个值相关联。Map集合不同于List,因为它不维护元素的顺序,而是通过键来访问其对应的值。本文将详细介绍...

    重要知识java中map集合的用法.pdf

    Map 集合是 Java 中一种非常常用的数据结构,了解 Map 集合的用法、Map 接口和方法、Map 的实现类、Map 的遍历和优化等方面的知识点,可以帮助开发者更好地使用 Map 集合,提高应用程序的性能和效率。

    自定义map实现java的hashmap

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

    java中Map类.pdf

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于数组和List,因为它不依赖于连续的索引访问元素,而是通过键(Key)来查找对应的值(Value)。Map接口提供了多种实现,如...

    java中Map类[归类].pdf

    此外,`equals(Object o)`和`hashCode()`方法用于比较Map对象的等价性和计算哈希值,这对于实现Map的比较和存放在哈希表中至关重要。 Map接口还有个内部类`Map.Entry`,它代表Map中的一个键值对。通过`Map.entrySet...

    Map实现类1

    了解这些知识点有助于理解和使用Java中的Map,特别是在处理大量数据时选择适合的Map实现类,以及在遍历和操作Map时选择高效的方式。在多线程环境中,如果需要线程安全,可以考虑使用ConcurrentHashMap。在需要有序...

    java Collection&Map

    总结起来,Java集合框架提供了多种数据结构和算法,通过接口和实现类的组合,可以根据实际需求选择合适的数据结构,同时通过Collections工具类进行便捷操作。正确实现equals()和hashCode()方法对于集合操作的正确性...

    金陵科技学院软件院大二上Java高级1212Map.docx

    在Java编程语言中,Map接口是集合框架的一部分,它提供了键值对的存储方式。Map不是列表或数组,而是关联键(key)与值(value)的容器,每个...通过实践这些示例,你可以更熟练地在Java项目中运用Map接口及其实现类。

    手写Java HaspMap

    HashMap是Java中的一个接口java.util.Map的实现类,它允许使用null键和null值。HashMap通过使用哈希函数将键映射到数组的特定位置,以实现快速查找、插入和删除操作。其时间复杂度通常为O(1),但在最坏的情况下,当...

    JAVA hashCode使用方法详解

    在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理集合类如 `List`, `Set`, `Map` 时。它们主要用于优化存储和查找效率,尤其是当涉及到哈希表(如 `HashMap` 和 `HashSet`)时...

    JAVA常用API文档 中文完整版.zip

    7. **异常处理**:Exception类及其子类构成异常层次结构,用于处理程序运行中的错误和异常情况。try-catch-finally语句块是处理异常的标准模式。 8. **日期时间**:Java 8引入了新的日期和时间API(java.time包),...

    java集合详解[归纳].pdf

    Java 集合是 Java 编程语言中最重要和最常用的数据结构之一。它提供了多种方式来存储和操作数据,从而提高了程序的效率和可读性。本文将对 Java 集合的基本概念、实现原理和常用方法进行详细的解释。 集合框架概述 ...

    实验05 Java集合.doc

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,...总之,这个实验深入地实践了Java集合框架的使用,加深了对集合概念、接口和实现类的理解,为后续的Java开发打下了坚实的基础。

Global site tag (gtag.js) - Google Analytics