IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> linkedHashmap排序机制 -> 正文阅读

[数据结构与算法]linkedHashmap排序机制

在这里插入图片描述LinkedHashMap = HashMap + 双向链表这个说法,对于我们快速理解LinkedHashMap很有启发性。LinkedHashMap不会去改变HashMap节点的性质,LinkedHashMap所做的,只是建立节点之间的联系,LinkedHashMap的增删改查操作,只是在HashMap的增删改查的基础上,进行head和tail指针的移动。总之一句话:LinkedHashMap的所有操作,都是基于HashMap,对自己的双向链表的操作。有点拗口,OK,再换一种说法大家理解一下:LinkedHashMap对HashMap进行了增强,如何增强呢?就是在HashMap上面套了一个双向链表。LinkedHashMap只操作自己维护的双向链表,对于复用HashMap的部分,LinkedHashMap不会做任何改变。为什么呢?因为LinkedHashMap是后来的功能,java的设计者们必须要保证,不能影响HashMap。为什么呢?其实和我们做项目是一个道理。因为大家生产上都用的是HashMap,你敢随便动老功能吗?
图片发自简书AppLinkedHashMap定义了accessOrder变量,值为true表示按照访问顺序排序,值为false表示按照插入顺序排序。accessOrder的默认值为false,也就是按照插入顺序排序。final boolean accessOrder;什么是有序?我们这里讨论的有序,指的是插入的顺序。一,按照访问顺序排序按照访问顺序排序,指的是当调用get()方法查询一个元素后,LinkedHashMap会把该元素移到链表的尾部。这里需要注意,最近最少使用算法LRU,Least Recently Used,就是基于LinkedHashMap的按访问顺序排序来实现的。实现思路:LinkedHashMap重写了Map接口的get()方法,get()方法主要做了什么呢?其实就是把当前访问的节点,移到双向链表的尾部。具体细节就是指针的移动,这里不再详细说明,感兴趣的可以查看LinkedHashMap的源代码:先看get()方法,然后调用了afterNodeAccess()方法。二,按照插入顺序排序按照插入顺序排序,指的是根据调用put()方法插入元素的顺序来排序。这个是LinkedHashMap的默认排序方法。按照插入顺序排序的实现,相对来说比较简单,每次调用put()方法插入元素时,都把这个元素放到双向链表的尾部,这样就是按照插入顺序排序。因为双向链表通过节点的head和tail保证有序。思考:HashMap的单向链表有next指针,为什么不能保证有序?答:因为单向链表只是发生hash碰撞时,存储具有多个相同hash值的数据结构。也就是说,只是桶内有序。但是HashMap的table数组是无序的,这个是按照哈希值来定位数组中的位置,并不是按照插入顺序排序的。不过,从这点来看,HashMap也是“有序”的,只不过这里的“有序”不是插入时的顺序。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:10:50  更:2021-09-01 12:12:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:55:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码