当前位置: 首页 > 面试题库 >

LinkedHashMap的内部实现与HashMap的实现有何不同?

呼延卓
2023-03-14
问题内容

我读到HashMap具有以下实现:

main array 
   ↓
[Entry] → Entry → Entry      ← linked-list implementation
[Entry]
[Entry] → Entry
[Entry]
[null ]

因此,它具有一个Entry对象数组。

问题:

  1. 我想知道在相同hashCode但不同对象的情况下,此数组的索引如何存储多个Entry对象。

  2. 这与LinkedHashMap实施有何不同?它的map的双链列表实现,但它是否像上面那样维护数组,以及如何存储指向下一个和上一个元素的指针?


问题答案:

因此,它具有Entry对象数组。

不完全是。它具有一系列Entry对象 。一个HashMap.Entry对象有一个next字段,允许Entry对象被链接的链接列表。

我想知道Entry在相同的hashCode但不同的对象的情况下,该数组的索引如何存储多个对象。

因为(如您问题中的图片所示)Entry对象是链接在一起的。

这与LinkedHashMap实施有何不同?它的map的双链列表实现,但它是否像上面那样维护数组,以及如何存储指向下一个和上一个元素的指针?

LinkedHashMap实现中,LinkedHashMap.Entry该类HashMap.Entry通过添加beforeafter字段来扩展该类。这些字段用于将LinkedHashMap.Entry对象组合成一个独立的双向链接列表,该列表记录插入顺序。因此,在LinkedHashMap类中,入口对象位于两个不同的链中:

  • 通过主哈希数组访问的单链接哈希链,以及

  • 按条目插入顺序保留的所有条目的单独的双向链接列表。



 类似资料:
  • 本文向大家介绍java HashMap内部实现原理详解,包括了java HashMap内部实现原理详解的使用技巧和注意事项,需要的朋友参考一下 详解HashMap内部实现原理 内部数据结构 从上面的数据结构定义可以看出,HashMap存元素的是一组键值对的链表,以什么形式存储呢 可以看出,是以数组形式储存,好的,现在我们知道,HashMap是以数组形式存储,每个数组里面是一个键值对,这个键值对还可

  • 我无法理解HashFunction在中的用法。 在HashMap实现中,哈希函数的使用是查找内部数组的索引,这可以是合理的,遵循哈希函数契约(相同的键必须具有相同的hashcode,但不同的键可以具有相同的hashcode)。 我的问题是: 1)哈希函数在中的用途是什么? 2)放置和获取方法如何适用于? 3) 为什么要在内部维护双链接列表?使用作为内部实现(就像)并在插入序列中维护条目数组的单独数

  • San CLI 是一个命令行工具,其次它是一个内置 Webpack 的前端工程化构建工具。San CLI 在架构设计上采取了微核心和插件化的设计思想,我们可以通过插件机制添加命令行命令,还可以通过插件机制定制 Webpack 构建工具,从而满足不同 San 环境的前端工程化需求。 San CLI 在兼顾 San 生态的同时,尽量做到通用化配置,在设计之初,我们希望不局限于 San 的应用范畴,做可

  • 我正在努力为下面给出的学生类编写合适的hashCode函数。 1)我认为hashCode应该足够好,这样两个不同对象的hashCode就不会相互冲突。 观察:对于这个实现,当我调试并检查“HashMap的内部表对象”类时,我发现HashMap中的每个条目都分配了不同的bucket位置。 问题:在每个索引处有一个桶(列表/树)的目的是什么。 实施: 2)如果我允许hashCode冲突: 观察:对于这

  • 主要内容:1 LinkedHashMap的概述,2 LinkedHashMap的源码解析,2.1 主要类属性,2.2 构造器,2.4 常见API方法,2.5 大链表与迭代顺序的维护,3 LinkedHashMap与LRU缓存,3.1 afterNodeInsertion方法,3.2 removeEldestEntry方法,3.3 LRU缓存实现案例,4 LinkedHashMap的总结本文基于JDK1.8详细介绍了LinkedHashMap的底层原理,它到底是如何保证元素有序的?同时讲解了基于访

  • 变量的内部实现 变量是一个语言实现的基础,变量有两个组成部分:变量名、变量值,PHP中可以将其对应为:zval、zend_value,这两个概念一定要区分开,PHP中变量的内存是通过引用计数进行管理的,而且PHP7中引用计数是在zend_value而不是zval上,变量之间的传递、赋值通常也是针对zend_value。 PHP中可以通过$关键词定义一个变量:$a;,在定义的同时可以进行初始化:$a