Skip to content

2019-05-06:请简述 LinkedHashMap 的工作原理和使用方式? #45

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Moosphan opened this issue May 6, 2019 · 9 comments
Open
Labels

Comments

@Moosphan
Copy link
Owner

Moosphan commented May 6, 2019

No description provided.

@Moosphan Moosphan added the Java label May 6, 2019
@DaveBoy
Copy link

DaveBoy commented May 6, 2019

HashMap的基础上加入了双向链表记录插入顺序,常用作LRU算法

@15860yang
Copy link

hash表实现快速查询,链表实现有序输出,将链表的快速插入删除和hash表的快速访问结合在一起

@MoJieBlog
Copy link
Collaborator

  • 查看LinkedHashMap源码发现是继承HashMap实现Map接口。也就是HashMap的方法LinkedMap都有。LinkHashMap与HashMap的主要区别是:LinkedHashMap是有序的,hashmap是无序的。LinkedHashMap通过维护一个双向链表实现有序,也正是因为要维护这个链表,内存上有更大的开销。
  • 补充下有序和无序
    • 我们说的无序是插入顺序和输出顺序不一致。
  • 补充一下链表结构和顺序结构:线性结构分为顺序结构,和链表结构。
    • 顺序结构:在内存中是一块完整有序内存。所以我们在查询的时候时候直接索引index,便可找到要查询的数据,速度非常快,缺点是插入删除慢。有点类似班级排队时(一列纵队),每个人都知道自己在第几个位置。老师只要说第三个位置,那这个同学立马知道老师要找的是自己。这时候要插入一个同学到第二个位置,所以之前第二个位置开始往后的每个同学的位置都要+1。所以比较慢。
    • 链表结构:通过结点头记录该结点的上一个结点和下一个下一个结点(就是传统的双链表,单链表就是只记录下一个结点,循环链表就是最后一个结点的下一个结点指向第一个结点)。正是因为这种关系,所以链表结构不需要一块完整的内存,而且插入删除相对快,但是查询相对慢。但是因为要维护结点头,所以内存开销相对大一点。有点类似于班级排队时,每个人虽然不知道自己的位置,但是知道自己前面是谁和后面是谁。当要插入一个同学b时到c前面时,只要c同学记住自己之前是a,现在换成b.b记住自己前面是a,后面是c。所以想对来说插入很快。删除类似。但是当老师按位置查询时,就要先从第一个开始计数,知道找到老师要找的数字。所以查询慢。

@18361237136
Copy link

hashMap上接一个链表

@yangfanggang
Copy link

综上,简单了解了一下linkedHashMap
1.有序的hashMap
2.工作原理 通过双向链表来实现有序的
3.使用方式 (我没玩过 坐等其他大牛回答 我先百度了解一哈)

打卡打卡

@Petterpx
Copy link

Petterpx commented May 7, 2019

LinkedHashMap是基于Hash表和链表的实现,并且依靠着双向链表保证迭代顺序是插入的顺序。
可以说LinkedHashMap就相当于HashMap的儿子,因为它内部也是用HashMap实现的。

@LvKang-insist
Copy link

LinedHashMap 是有序的,且默认为插入的顺序,他是基于HashMap 和双向链表实现的,LinkedHashMap是线程不安全的

@Alex-Cin
Copy link

Alex-Cin commented May 7, 2019

大家记得, 手写 BitmapLruCache, 我写过;(前一天晚上刚看, 第二天就遇到了, 分分钟默写一遍)

@zinark-martin
Copy link

使用的话当然还是LruCache了, 他有一个三参数方法直接实现LruCache, 可以康康力扣的146题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

10 participants