Skip to content

Instantly share code, notes, and snippets.

@hocyadav
Created November 23, 2019 02:32
Show Gist options
  • Save hocyadav/e8aa663a3f955c2dd27add965c070fd7 to your computer and use it in GitHub Desktop.
Save hocyadav/e8aa663a3f955c2dd27add965c070fd7 to your computer and use it in GitHub Desktop.
LRU cache implementation using DQueue, data structure used : deque + set
package ds_collection_n_LRU_23rd_nov;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
/**
*
* @author Hariom Yadav - Nov 23, 2019
*
*/
//data structure used - deque + set or hashmap
class Lru{
Deque<Integer> dq ;//element present in DQ takes n time
HashSet<Integer> set;//only to make element present in DQ or not
int size;
public Lru(int s){
size = s;
dq = new LinkedList<>();
set = new HashSet<>();
}
public void refer(int key) {
if(! set.contains(key)) {//key not present in cache
if(dq.size() == size) {
set.remove(dq.removeLast());
}
dq.addFirst(key);
set.add(key);
}else {//key present in cache
//get key location
if(dq.getFirst() != key) {
Iterator<Integer> it = dq.iterator();
while(it.hasNext()) {
if(it.next() == key) {
it.remove();
break;
}
}
//dq.remove(index);//not removing that element from list - since this is DQ not array
dq.addFirst(key);
//set.add(key);
}
}
}
public void print() {
Iterator<Integer> it = dq.iterator();
System.out.print("LRU cache : ");
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
System.out.println();
}
}
public class LruCacheImpl {
public static void main(String[] args) {
Lru obj = new Lru(4);
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(22); obj.print();
obj.refer(22); obj.print();
obj.refer(22); obj.print();
obj.refer(33); obj.print();
obj.refer(33); obj.print();
obj.refer(33); obj.print();
obj.refer(22); obj.print();
obj.refer(22); obj.print();
obj.refer(22); obj.print();
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(11); obj.print();
obj.refer(5); obj.print();
obj.refer(11); obj.print();
obj.refer(6); obj.print();
obj.refer(11); obj.print();
}
}
@hocyadav
Copy link
Author

Output:
LRU cache : 11
LRU cache : 11
LRU cache : 11
LRU cache : 11
LRU cache : 22 11
LRU cache : 22 11
LRU cache : 22 11
LRU cache : 33 22 11
LRU cache : 33 22 11
LRU cache : 33 22 11
LRU cache : 22 33 11
LRU cache : 22 33 11
LRU cache : 22 33 11
LRU cache : 11 22 33
LRU cache : 11 22 33
LRU cache : 11 22 33
LRU cache : 11 22 33
LRU cache : 5 11 22 33
LRU cache : 11 5 22 33
LRU cache : 6 11 5 22
LRU cache : 11 6 5 22

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment