首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在调用LinkedHashMap的put()方法后,'before‘和' after’变量如何更新?

在调用LinkedHashMap的put()方法后,'before'和'after'变量会根据插入元素的位置进行更新。LinkedHashMap是基于哈希表和双向链表实现的,它维护了一个双向链表,用于保持元素的插入顺序。

具体更新过程如下:

  1. 如果插入的元素是一个新元素,'before'变量会被更新为当前链表的尾节点,'after'变量会被更新为null。
  2. 如果插入的元素已经存在于LinkedHashMap中,它会被移动到链表的尾部,'before'变量会被更新为该元素的前一个节点,'after'变量会被更新为该元素的后一个节点。
  3. 如果插入的元素是链表的头节点,'before'变量会被更新为null,'after'变量会被更新为链表的第二个节点。

通过这种方式,LinkedHashMap保持了插入顺序,并且可以通过迭代链表来按照插入顺序访问元素。

LinkedHashMap的优势在于它既具备了哈希表的快速查找特性,又可以保持元素的插入顺序。它适用于需要按照插入顺序访问元素的场景,比如实现LRU缓存、实现有序的映射关系等。

腾讯云提供了云计算相关的产品和服务,其中与LinkedHashMap类似的产品是TencentDB for Redis,它是腾讯云提供的高性能、高可靠性的分布式缓存数据库。TencentDB for Redis支持有序集合(Sorted Set)的数据结构,可以通过有序集合来实现类似LinkedHashMap的功能。您可以通过以下链接了解更多关于TencentDB for Redis的信息:https://cloud.tencent.com/product/trs

相关搜索:在执行方案之前,将调用所有@Before和@After方案方法如何使用Express和Mongoose的PUT方法更新MongoDB数据库?Django -如何在保存和更新时调用模型中的方法调用为什么在调用Filter()方法后,传入参数的列表没有更新?在Spring和java中初始化Environment对象后如何调用方法?在mongoose中调用document.save()函数后,如何获取更新后的文档?如何在父状态更新后仅调用子组件中的方法一次如何在自定义适配器中调用notificationdatasetchanged()后更新OnStart()中的变量在我调用了一个扩展方法后,我如何让resharper知道我的变量不是空的?在@Input变量改变后,如何更新Angular中的TinyMCE编辑器内容?在使用ReactiveMongo和akka成功更新查询后,如何调用find查询,获取None.get异常在Vue js中强制方法调用后,如何从父对象获取更新的属性?在一个方法中调用一个变量是如何工作的?如何确保方法在更改后被调用,而不再在Mockito中的另一个更改后被调用Laravel 5-在每次composer更新后调用未定义的方法Illuminate\Events\Dispatcher::fire()时出错更新后如何获取全局变量在另一个文件中的值?如何使用未来的方法,但Dart grpc客户端在调用未来的方法后不提供未知的服务在c#中,如何将方法中的变量发送到调用者方法的catch块?如何保证在列表视图中调用卡片后,包含日期和时间的框始终居中在另一个类的和实例中发生事件(单击Tkinter按钮)后更新类中的变量
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linkedhashmap源码分析

,之后又添加了指向上一节点before指向下一节点after,这样就形成了双向链表,用来记录元素顺序....= last; last.after = p; } } LInkedHashMap并没有重写put()方法,但是重写了put()方法中会调用newNode()方法,代码如上面所示...重写newNode()方法中,调用父类构造方法新建一个节点,调用linkNodeLast()方法,将新插入节点链接在双链表尾部. remove()方法 void afterNodeRemoval...HashMap基础上,对每一个节点添加向前向后指针,这样所有的节点形成了双向链表,自然就是有序. 2.如何保证顺序正确以及同步 通过重写一些关键方法,元素发生增删改查等行为时,除了Hash...桶上进行操作,也对链表进行相应更新,以此来保证顺序正确. 3.如何实现两种顺序(插入顺序或者访问顺序)?

35830
  • 深入浅出Java中数据结构:LinkedHashMap详解

    因此,LinkedHashMap需要重写HashMapputremove方法,以保证插入删除元素时能够正确地更新链表。...put方法   当调用put方法插入一个新元素时,LinkedHashMap调用父类HashMapputVal方法来实现插入。...return null; }   调用父类HashMapput方法插入新元素之后,LinkedHashMap会在afterNodeInsertion方法更新链表。...如果不需要删除节点,则会调用linkNodeLast方法将新节点插入到链表尾部。   删除节点时,调用removeNode方法删除节点,会调用afterNodeRemoval方法更新链表。...使用LinkedHashMap时,需要注意它占用内存较HashMap更多,删除节点时需要更新前驱节点after指针后继节点before指针,性能可能略差一些。

    64951

    LinkedHashMap 源码解析

    LinkedHashMap 内部类 Entry 继承自 HashMap 内部类 Node,并新增了两个引用,分别是 before after,是用于维护双向链表。...类层级关系图: image.png LinkedHashMap.Entry继承自HashMapNode类,新增了beforeafter属性,用于维护前继后继节点,以此形成双向链表。...删除节点时,父类删除逻辑并不会修复 LinkedHashMap 所维护双向链表,这不是它职责。那么删除及节点,被删除节点该如何从双链表中移除呢?当然,办法还算是有的。...上一节最后提到 HashMap 中三个回调方法运行 LinkedHashMap 对一些操作做出响应。所以,删除及节点,回调方法 afterNodeRemoval 会被调用。...假设我们访问下图键值为3节点,访问前结构为: image.png 访问,键值为3节点将会被移动到双向链表最后位置,其前驱后继也会跟着更新

    59551

    (49) 剖析LinkedHashMap 计算机程序思维逻辑

    header表示双向链表头,它类型Entry是一个内部类,这个类是HashMap.Entry子类,增加了两个变量beforeafter,指向链表中前驱后继,Entry完整定义为: private...是HashMap.Entry中定义方法HashMap中,这两个方法实现为空,它们就是被设计用来被子类重写put调用且键存在时,HashMap会调用EntryrecordAccess方法...了解了内部组成,我们来看操作方法,先看构造方法。 构造方法 HashMap构造方法中,会调用init方法,init方法HashMap实现中为空,也是被设计用来被重写。...put方法 LinkedHashMap中,put方法还会将节点加入到链表中来,如果是按访问有序,还会调整节点到末尾,并根据情况删除最久没被访问节点。...HashMapput实现中,如果键已经存在了,则会调用节点recordAccess方法LinkedHashMap.Entry重写了该方法,如果是按访问有序,则调整该节点到链表末尾。

    53360

    图解LinkedHashMap原理

    还记得,上一篇HashMap解析中提到,HashMap构造函数中,调用了init方法,而在HashMap中init方法是空实现,但LinkedHashMap重写了该方法,所以LinkedHashMap...lm.header); } } LinkedHashMap中,只有accessOrder为true,即是访问顺序模式,才会put时对更新Entry进行重新排序...后面调用LinkedHashMap.EntryrecordAccess方法,上面分析过put过程中这个方法,其实就是访问顺序LinkedHashMap进行了get操作以后,重新排序,把getEntry...而上面介绍到,LinkedHashMap初始化时,会调用init方法去初始化一个beforeafter都指向自身Entry,但是put过程会把新增加Entry加入到双向链表表尾,所以只要LinkedHashMap...before方式引用。

    69720

    【JDK1.8】JDK1.8集合源码阅读——LinkedHashMap

    可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点——before一个节点——after,从而将所有的节点已链表形式串联一起来,从名字上来看...Entry作为基本节点,可以看到LinkedHashMapEntry继承自HashMapNode,在其基础上加上了beforeafter两个指针,而TreeNode作为HashMapLinkedHashMap...)e, b = p.before, a = p.after; //设置p一个节点为null,因为执行p链表末尾,after肯定为null p.after = null;...下面来简单说明一下: 正常情况下:查询p链表中间,那么将p设置到末尾,它原先前节点b后节点a就变成了前后节点。...,head=p 3.5 LinkedHashMapput()方法 接下来,让我们来看一下LinkedHashMap是怎么插入EntryLinkedHashMapput方法调用还是HashMap

    53940

    聊聊java中哪些Map:(四)LinkedHashMap源码分析

    调用put、 get、getOrDefault、compute、computeIfPresent、merge等方法将导致对应条目的访问(假设它在调用完成存在)。...Entry主要增加了beforeafter两个指针,以将HashMap全部Entry变成双向链表。 我们可以看到是,jdk1.4时候就完成了LinkedHashMap。...这也为我们后续代码重构提供了一个新思路。 1.3 重要成员变量 我们可以看到,LinkedHashMap中扩张成员变量位head、tail。分别指向链表尾。...accessOrder只是控制了一个变量,但是后续各getremove方法中将会根据这个变量变成不同行为。...4.重要方法 4.1 put 我们先来看看LinkedHashMap如何进行Put。 实际上LinkedHashMap没有重载put方法,而是利用了HashMap中put

    44850

    LinkedHashMap实现原理(复习)

    * 继承HashMapEntry元素,又保存了其上一个元素before下一个元素after引用。   ...LinkedHashMap重写了init()方法调用父类构造方法完成构造,进一步实现了对其元素Entry初始化操作。 Java代码   ?... = header;   }       3) 存储:    LinkedHashMap并未重写父类HashMapput方法,而是重写了父类HashMapput方法调用方法void addEntry...get方法,实际调用父类getEntry()方法取得查找元素,再判断当排序模式accessOrder为true时,记录访问顺序,将最新访问元素添加到双向链表表头,并从原来位置删除。...LinkedHashMap提供了removeEldestEntry(Map.Entry eldest)方法将新条目插入到映射put putAll将调用方法

    66340

    【JDK1.8】JDK1.8集合源码阅读——LinkedHashMap

    可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点——before一个节点——after,从而将所有的节点已链表形式串联一起来,从名字上来看...Entry作为基本节点,可以看到LinkedHashMapEntry继承自HashMapNode,在其基础上加上了beforeafter两个指针,而TreeNode作为HashMapLinkedHashMap...)e, b = p.before, a = p.after; //设置p一个节点为null,因为执行p链表末尾,after肯定为null p.after = null;...下面来简单说明一下: 正常情况下:查询p链表中间,那么将p设置到末尾,它原先前节点b后节点a就变成了前后节点。...,head=p 3.5 LinkedHashMapput()方法 接下来,让我们来看一下LinkedHashMap是怎么插入EntryLinkedHashMapput方法调用还是HashMap

    698140
    领券