JAVA有序表(双向链表)实现LRU缓存算法,用哈希表(HashMap)降低时间复杂度

JAVA实现LRU缓存算法,用哈希表(HashMap)降低时间复杂度

1、算法分析

上一篇我们用链表简单的实现了LRU的算法思维以及算法,我们最后分析的时间复杂度为0(n),n为链表中的长度,我们用的是单链表,单链表实现的,所有删除需要查找到对应的节点,利用哨兵的思维,监控查找的前一个节点。就能轻松实现删除。上一篇的LRU分析和简单实现

1.1利用哈希表降低时间复杂度(链表是双向链表)

有没有更好的办法来降低时间的复杂度呢?答案是利用哈希表,哈希表的key就是链表中的data,哈希表的value,存储的是每一个节点node。我们在查找和删除的时候,只需要在HashMap中找到node,然后从链表中删除node,而我们利用哈希表删除,查找,添加的时间复杂度接近O(1),

1.2 示意图

在这里插入图片描述

2、代码的实现

import java.util.HashMap;
import java.util.Map;

public class Chain {
   
	public class Node{
   
		public int data;
		public Node next;
		public Node pre;
	}
	/**
	 * 采用map来存储对应的节点指针,key为 输入的值,value为值所在的Node对象。
	 */
	private Map<Integer,Node> map=new HashMap<Integer,Node>();
	/**
	 * 头指针 永远指向头
	 * 
	 */
	private Node head=null;
	/**
	 * 尾指针 永远指向尾
	 */
	private Node tail=null;
	/**
	 * 把数据向缓存数据池中添加
	 * @param data data为需要缓存的数据
	 */
	public void LUR(int data) {
   
		/**
		 * 缓存是否存在,在map中,如果存在,则删除该节点,如果不存在则在头节点插入
		 */
		if(map.containsKey
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值