我们知道HashMap这个数据结构根据一个指定的值查找的时间复杂度是O(1),但是有一个问题就是HashMap是无序的比如你放进去第一个值A,但是遍历Map获取到对应的位置可能是第五个位置。那有时候我们会要求能像Map一样直接取的,但是它整体遍历下来还能是一个有顺序的数据结构。
有没有这样的数据结构呢?有,这就是LinkedHashMap。
LinkedHashMap在结构上是hashmap+双向链表的一个数据结构,HashMap就是存数据该咋存数据还是怎么存的,但是额外维护一个双向链表来存先后数据,最后遍历的时候实际要以这个双向链表为准。
关于LinkedHashMap的几个问题:
(1)LinkedHashMap是线程安全的吗?
不是,貌似关于Map的线程安全的应该常见的只有CurrentHashMap,靠着CAS,旧值和新值比较的那种实现的。
(2)LinkedHashMap怎么做到遍历是有序的?
相当于LinkedHashMap是自己重写的重写HashMap 的迭代器,用它维护的双向链表进行迭代输出。
(3)访问速度怎么样?
肯定比不过正常的HashMap,毕竟多维护一个双向链表。