【LeetCode】—— LRU缓存机制
为什么采用HashMap和双向链表的组合呢?
用队列和单向链表可以吗?
1)用队列不行吗?
不行队列只能做到先进先出,但是重复用到中间的数据时无法把中间的数据移动到顶端。
2)用单链表不行吗?
单链表能实现新来的放头部,最久不用的在尾部删除。但删除的时候需要遍历到尾部,因为单链表只有头指针。在用到已经用到过的数据时,还要遍历整合链表,来确定是否用过,然后再遍历到响应位置来剔除的节点,并重新放在头部。这效率可想而知。
这时HashMap的作用就出来了 他可以在单位1的时间判断value的值是否存在,key直接存储节点对象,能直接定位删除对应的节点(将比节点的父节点指向此节点的子节点)。
要通过一个节点直接获得父节点的话,通过单链表是不行的。
这时双向链表的作用也提现出来了。能直接定位到父节点。 这效率就很高了。而且由于双向链表有尾指针,所以剔除最后的尾节点也十分方便,快捷。
参考:https://blog.csdn.net/HD243608836/article/details/103572854