`
javafenger
  • 浏览: 250943 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

类 HashMap

阅读更多
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
 

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

此实现假定哈希函数将元素正确分布在各桶之间,可为基本操作(getput)提供稳定的性能。迭代集合视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)的和成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

HashMap 的实例有两个参数影响其性能:初始容量加载因子容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。

通常,默认加载因子 (.75) 在时间和空间成本上寻 求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 getput 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地降低 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。

如果很多映射关系要存储在 HashMap 实例中,则相对于按需执行自动的 rehash 操作以增大表的容量来说,使用足够大的初始容量创建它将使得映射关系能更有效地存储。

注意,此实现不是同步的。如果多个线程同时访问此映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:

 Map m = Collections.synchronizedMap(new HashMap(...));

由所有此类的“集合视图方法”所返回的迭代器都是快速失败 的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 removeadd 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒在将来不确定的时间任意发生不确定行为的风险。

注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

此类是 Java Collections Framework 的成员。

比较HashMap与HashTable得区别:
HashMap是HashTable得轻量级实现(非线程安全得实现),他们都完成了Map接口;主要区别在于HvashMap允许空(null)
键值,由于非线程安全,效率上可能高于后者!
 


分享到:
评论

相关推荐

    java集合类HashMap总结共7页.pdf.zip

    这篇7页的PDF文档“java集合类HashMap总结”可能是对HashMap类的深入解析,包括其原理、常用方法以及在实际开发中的应用。 HashMap的核心特性在于它的哈希函数,这个函数将键(key)转换为一个哈希码(hash code)...

    枚举 HashMap

    在HashMap中,我们可以将任意对象作为值,如字符串、整数、自定义类实例等,这比枚举类更灵活。 4. **遍历和查找** 可以通过HashMap的迭代器轻松遍历所有枚举值,或者使用`get()`方法快速查找特定的枚举值。 5. *...

    比较Vector、ArrayList和hashtable hashmap

    HashMap 类 HashMap 是一个散列表,它存储元素对(键值对)。HashMap 使用哈希函数将键映射到桶中,这样可以快速定位到对应的值。HashMap 不保证映射的顺序,特别是它不保证这种顺序在多次迭代之后保持不变。HashMap...

    Java SE程序 HashMap类

    Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序...

    hashMap工具类

    ### hashMap工具类详解 在本篇文章中,我们将详细介绍一个名为`hashMap`的工具类,该类被设计用于Adobe Flex应用程序中,旨在提供一种简单且高效的方法来处理键值对数据结构。通过深入分析该类的实现细节,我们能够...

    Java HashMap类详解

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

    HashMap类.rar

    HashMap类在Java编程语言中是集合框架的一部分,它是一个基于哈希表的Map接口实现。HashMap提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。在这个压缩包“HashMap类.rar”中,包含的是易语言版本的...

    易语言HashMap类

    易语言HashMap类是一种在易语言编程环境中实现的高效数据结构,它主要用于存储键值对(key-value pairs),提供快速的数据存取。HashMap类基于哈希表(Hash Table)原理,通过计算键的散列值来确定数据在内存中的...

    Hashmap快速比较类

    利用java里面Hashmap类的快速查找算法,比较两个文件差异内容,数万条数据只要几毫秒,当然不能跟脚本语言和C++速度进行比较了

    hashmap面试题_hashmap_

    HashMap非线程安全,适合于单线程环境或已经通过并发工具类控制并发的场景。 二、HashMap底层原理 HashMap的内部实现基于数组+链表/红黑树的结构。数组中的每个元素都是一个Entry对象,每个Entry包含键值对和指向下...

    易语言源码易语言HashMap类源码.rar

    在给定的压缩包“易语言源码易语言HashMap类源码.rar”中,包含了易语言实现的HashMap类的源代码。HashMap是一种常见的数据结构,在许多编程语言中都有实现,它提供了快速的键值对存储和查找功能。 HashMap类是基于...

    HashMap类

    HashMap类在Java编程语言中是集合框架的重要组成部分,它是一个基于哈希表的Map接口实现。HashMap提供了存储和检索键值对(key-value pairs)的高效机制,允许使用null键和值。这篇博客将深入探讨HashMap的内部工作...

    关于如何解决HashMap线程安全问题的介绍

    在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...

    HashMap介绍和使用

    这里的`Entry`是HashMap内部的一个静态类,用于存储键值对以及下一个节点的引用,构成链表: ```java static class Entry,V&gt; implements Map.Entry,V&gt; { final K key; V value; final int hash; Entry,V&gt; next;...

    HashMap和HashTable的区别和不同

    - **HashMap**: 相较之下,`HashMap`不是一个线程安全的类。如果多个线程并发地访问并修改`HashMap`,则可能导致数据不一致性问题。为了在多线程环境中安全地使用`HashMap`,开发者需要自己负责同步,例如使用`...

    java集合案例.docx

    本文档主要讲解Java集合框架中的ArrayList、HashMap和Collections类的使用,通过一个扑克牌游戏的示例程序来演示这些类的应用。 一、 Java集合框架 Java集合框架(Java Collections Framework)是Java语言中对集合...

    HashMap.js

    模拟java中的HashMap类js类对象,可以与js的Array类对象配合使用

    JAVA中常用的数据结构

    HashMap类实现了Map接口,是一个基于散列表的Map实现类。HashMap类使用散列表来存储键值对,查找和操作的效率非常高。HashMap类是线程非同步的(asynchronized),因此在多线程环境下需要小心使用。 SortedMap接口 ...

    hashmap 实例

    HashMap 是 Java 中常用的一种数据结构,属于 Java.util 包下的类,它是基于哈希表实现的。在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable ...

    HASHMAP排序功能描述

    HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。然而,HashMap本身并不保证元素的顺序,特别是当涉及到遍历或输出HashMap的内容时,顺序可能会...

Global site tag (gtag.js) - Google Analytics