hashmap和linkedhashmap

204 阅读1分钟

hashmap

遍历读取的数据和插入时的顺序是不一致的,底层数据结构是由hashtable+单链表

linkedhashmap

linkedhashmap是有序的,是在hashmap的基础上,增加了两个指针,来连接前后节点,底层数据结构是hashmap+双向链表

linkedhashmap有插入顺序和访问顺序,默认是插入顺序,即accessOrder=false

插入顺序:

put()

1)如果key之前在table中存在,直接替换并返回旧值;(Entry []table)

2)如果不存在则调用addEntry(),加入到table中(插入table[index]的表头)和双向链表中

get()

1)通过key的hash值找到对应下标,再找到要找的节点

访问顺序:

put()和get()都需要对访问的节点进行重排序(recordAccess()),当前访问的节点会从双向链表删除,重新加入到表尾

参考:

www.jianshu.com/p/8f4f58b4b…