数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,时间复杂度均为O(1))

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}

}

自己实现LRU

我们通过看LinkedHashMap的源代码,知道其所以然后就可以自己实现它。

class LRUCache {

static class Node {

int key;

int val;

Node prev;

Node next;

private Node(){}

public Node(int key, int val) {

this.key = key;

this.val = val;

}

}

private int size;

private HashMap<Integer, Node> map;

private int capacity;

private Node head;

private Node tail;

public LRUCache(int capacity) {

this.size = 0;

this.capacity = capacity;

map = new HashMap<>();

head = new Node();

tail = new Node();

head.next = tail;

tail.prev = head;

}

public int get(int key) {

Node node = map.get(key);

if (node == null) {

//没有这个节点

return -1;

}

//需要移动到最前面

moveHead(node);

return node.val;

}

private void moveHead(Node node) {

//先删除这个节点,然后再将这个节点添加到头部

deleteNode(node);

addHead(node);

}

private void addHead(Node node) {

node.prev = head;

node.next = head.next;

head.next.prev = node;

head.next = node;

}

private void deleteNode(Node node) {

node.prev.next = node.next;

node.next.prev = node.prev;

}

public void put(int key, int value) {

Node node = map.get(key);

if (node == null) {

//得新建节点

Node cur = new Node(key, value);

map.put(key, cur);

//将这个节点放到头部

addHead(cur);

++size;

if (size > capacity) {

//删除尾节点 下面这俩步不能放反,放反的话map中删除的节点就是待删除的前一个节点

map.remove(tail.prev.key);

deleteTailNode();

–size;

}

} else {

//说明有这个节点了

node.val = value;

moveHead(node);

}

}

private void deleteTailNode() {

Node node = tail.prev;

deleteNode(node);
}
}

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

r8ww-1715547335432)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值