缓存
缓存是非常常见的东西,比如cpu缓存,内存缓存。所有的缓存都是为了提高效率的。实际上就是当用户访问时可以直接从缓存中读取数据。
缓存总会有数据存满的时候,那么缓存满了之后如何去删除老的数据呢。
这个时候的算法常见的有三种
FIFO:first in first out 先进先出。先存储进来的先删除
LRU:Least Recently Used 最近最少使用策略
LFU: least frequently used 最少使用策略
以下是使用单链表实现LRU缓存淘汰算法
public class HashSetMisunderstanding {
public static void main(String[] args) {
new HashSetMisunderstanding().judgeList();
}
public void judgeList(){
Set<A> list = new HashSet<A>();//这里创建一个hashset集合
for(int i=1;i<4;i++){
A a = new A(1,1);//循环中创建新的对象A来存储相同的数据
list.add(a);
}
for(int i=2;i<6;i++){
A a= new A(1,1);
if(list.add(a)){//判断是否能存储进去
System.out.println("添加成功->"+i);
}
}
for(A a:list){
System.out.println(a.toString());//打印出相应的值 看看是否唯一
}
}
class A implements Serializable {
private static final long serialVersionUID = 1L;
private Integer mi;
private Integer bi;
public A() {
super();
}
public A(Integer mi, Integer bi) {
super();
this.mi = mi;
this.bi = bi;
}
public Integer getMi() {
return mi;
}
public Integer getBi() {
return bi;
}
public void setMi(Integer mi) {
this.mi = mi;
}
public void setBi(Integer bi) {
this.bi = bi;
}
@Override
public String toString() {
return (mi==null?mi:mi.toString())+"--"+(bi==null?bi:bi.toString());
}
}
}
public class Node implements Comparable<Node> {
private int data;
private Node next;
@Override
public String toString() {
return "Node{" +
"data=" + data +
", next=" + next +
'}';
}
@Override
public boolean equals(Object obj) {
Node n = (Node) obj;
return n.getData()==this.data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public int compareTo(Node o) {
return this.data - o.getData();
}
}