美文网首页
HashMap类翻译

HashMap类翻译

作者: 不积小流_无以成江海 | 来源:发表于2023-05-18 10:28 被阅读0次

HashMap是基于哈希表实现的Map接口,它提供了所有可选的Map操作,并允许null值和null键。HashMap类与Hashtable类类似,但是它是非同步的,并允许null值。HashMap类不保证Map的顺序,特别是它不保证顺序会随时间保持不变。

HashMap类提供了基本操作(get和put)的常数时间性能,假设哈希函数将元素适当地分散在桶中。对集合视图的迭代需要与HashMap实例的“容量”(桶的数量)加上其大小(键值映射的数量)成比例的时间。因此,如果迭代性能很重要,就非常重要不要将初始容量设置得太高(或负载因子太低)。

HashMap实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量是哈希表创建时的容量。负载因子是允许哈希表在其容量自动增加之前变得多满的度量。当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希表将被重新哈希(即内部数据结构将被重建),以便哈希表具有大约两倍的桶数。

通常情况下,缺省的负载因子(0.75)在时间和空间成本之间提供了良好的平衡。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括get和put)。在设置初始容量时,应考虑映射中的预期条目数和其负载因子,以最小化重新哈希操作的数量。如果初始容量大于条目数除以负载因子的最大值,则永远不会发生重新哈希操作。

如果要存储许多映射到HashMap实例中,使用足够大的容量创建它将允许映射比让它按需执行自动重新哈希更有效地存储。请注意,使用许多具有相同hashCode()的键是减慢任何哈希表性能的一种确定的方法。为了缓解影响,当键是可比较的时,这个类可以使用键之间的比较顺序来帮助打破平局。

请注意,这个实现是不同步的。如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部同步它。结构修改是添加或删除一个或多个映射的任何操作;仅仅改变一个实例已经包含的键的值不是结构修改。这通常通过在自然封装映射的某个对象上同步来实现。如果不存在这样的对象,则应使用Collections.synchronizedMap方法“包装”映射。最好在创建时完成,以防止意外的非同步访问映射:

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

这个类的所有“集合视图方法”返回的迭代器都是快速失败的:如果在迭代器创建后的任何时候以任何方式(除了迭代器自己的remove方法)结构性地修改了映射,则迭代器将抛出ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速而干净地失败,而不是冒着在未来的某个不确定的时间面临任意的、非确定性的行为的风险。

请注意,迭代器的快速失败行为不能保证,因为在不同步的并发修改存在的情况下,通常是不可能做出任何硬性保证的。快速失败迭代器尽力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序是错误的,迭代器的快速失败行为应该仅用于检测错误。

相关文章

  • HashMap了解一下

    前言 HashMap HashMap类继承图 HashMap属性 HashMap构造函数HashMap(int i...

  • HashMap底层是如何工作的

    本文翻译自 Coding Geek, 原文地址 绝大多数Java开发者都在使用Map类,尤其是HashMap。Ha...

  • 计划

    1、java集合类:HashMap ConcurrentHashMap; HashMap:https://ww...

  • HashMap底层实现及源码分析

    HashMap类继承关系 HashMap简介 先来看看JDK中对HashMap的描述: HashMap数据结构 每...

  • JDK源码分析 – HashMap

    HashMap类的申明 HashMap的定义如下: 1publicclassHashMapextendsAbstr...

  • HashMap类

    HashMap类实现了Map接口,用来存储从键对象到值对象的映射。就像HashSet一样,这个类称为HashMap...

  • HashMap和Hashtable的详细区别

    HashMap和Hashtable的区别1、继承父类不同HashMap继承自AbstractMap类Ha...

  • HashMap源代码分析

    1.HashMap简介 HashMap继承了AbstractMap类该类实现了Map接口,HashMap同时实现了...

  • 深度剖析HashMap原理

    HashMap1. HashMap 简介1.1 类定义1.1.1 实现和继承关系1.1.2 HashMap引入1....

  • HashMap 源码阅读笔记

    HashMap 定义 下面是 HashMap 的一个类图:::: hljs-center :::从类图可知,除了两...

网友评论

      本文标题:HashMap类翻译

      本文链接:https://www.haomeiwen.com/subject/kgmwsdtx.html