Created
November 23, 2019 02:32
-
-
Save hocyadav/e8aa663a3f955c2dd27add965c070fd7 to your computer and use it in GitHub Desktop.
LRU cache implementation using DQueue, data structure used : deque + set
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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