java mysql lru_LRU算法java实现

packagecom.cw.demo.algorithm;importjava.util.concurrent.ConcurrentHashMap;/*** LRU算法demo

*

*@authorchenwei

* @create 2017-11-13 16:18

**/

public classLRU

{public static voidmain(String[] args) {

LruList list= newLruList();

list.put("key1","value1");

list.put("key2","value2");

list.put("key3","value3");

list.put("key4","value4");

list.put("key5","value5");

list.put("key6","value6");

list.put("key7","value7");

System.out.println(list);

list.get("key5");

list.get("key1");

list.put("key8","value8");

list.put("key9","value9");

list.put("key10","value10");

list.put("key11","value11");

list.put("key12","value12");

list.get("key1");

list.get("key3");

System.out.println(list);

list.put("key3","value3");

System.out.println(list);

}/*** lru数据结构*/

static class LruList{private Nodefirst;private Nodelast;private int capacity = 10;private ConcurrentHashMap data = new ConcurrentHashMap<>();

LruList() {

first= new Node<>();

last= new Node<>();

first.next=last;

last.prev=first;

}

LruList(intcapacity) {this.capacity =capacity;

}publicNode get(String key) {if (key == null) {return null;

}

Node node=data.get(key);if (node != null) {//node的相邻节点双向指针指向对方

node.prev.next=node.next;

node.next.prev=node.prev;//将node插入到first后

node.next=first.next;

node.prev=first;

first.next.prev=node;

first.next=node;returnnode;

}return null;

}public voidput(String key,V value) {if (key == null) {throw new IllegalArgumentException("param is null");

}

Node node=data.get(key);if (node == null) {if (data.size() >=capacity) {

Node nodeRemoved=last.prev;

data.remove(nodeRemoved.key);

nodeRemoved.prev.next=last;

last.prev=nodeRemoved.prev;

}

node= new Node<>(key, value);

data.put(key, node);

}else{

node.prev.next=node.next;

node.next.prev=node.prev;

}//将node插入到first后面

node.next=first.next;

node.prev=first;

first.next.prev=node;

first.next=node;

}

@OverridepublicString toString() {

StringBuilder sb= newStringBuilder();

sb.append("[");

Node node=first.next;while (node !=last) {

sb.append("{").append(node.key).append(":").append(node.value).append("}");if (node.next !=last) {

sb.append(",");

}

node=node.next;

}

sb.append("]");returnsb.toString();

}/*** 节点类*/

static class Node{privateString key;privateV value;privateNode prev;privateNode next;

Node (){

}

Node(String key, V value) {this.key =key;this.value =value;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值