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()),当前访问的节点会从双向链表删除,重新加入到表尾
参考: