Home > Data Structures and Algorithms Questions >LRU Cache
A Least Recently Used (LRU) Cache organizes items in order of use, allowing you to quickly identify which item hasn't been used for the longest amount of time.
We have possible page number and given cache memory size.The LRU caching scheme removes the least recently used frame when the cache is full and a new page is referenced which is not there in cache
Assuming we have LRU size = 4
import java.util.HashMap; class Entry { int value; int key; Entry left; Entry right; } public class LRUCache { HashMaphashmap; Entry start, end; int LRU_SIZE = 4; // Here i am setting 4 to test the LRU cache public LRUCache() { hashmap = new HashMap (); } public int getEntry(int key) { if (hashmap.containsKey(key)) // Key Already Exist, just update the { Entry entry = hashmap.get(key); removeNode(entry); addAtTop(entry); return entry.value; } return -1; } public void putEntry(int key, int value) { if (hashmap.containsKey(key)) // Key Already Exist, just update the value and move it to top { Entry entry = hashmap.get(key); entry.value = value; removeNode(entry); addAtTop(entry); } else { Entry newnode = new Entry(); newnode.left = null; newnode.right = null; newnode.value = value; newnode.key = key; if (hashmap.size() > LRU_SIZE) // We have reached maxium size so need to make room for new element. { hashmap.remove(end.key); removeNode(end); addAtTop(newnode); } else { addAtTop(newnode); } hashmap.put(key, newnode); } } public void addAtTop(Entry node) { node.right = start; node.left = null; if (start != null) start.left = node; start = node; if (end == null) end = start; } public void removeNode(Entry node) { if (node.left != null) { node.left.right = node.right; } else { start = node.right; } if (node.right != null) { node.right.left = node.left; } else { end = node.left; } } public static void main(String[] args) throws java.lang.Exception { // Main Function LRUCache lrucache = new LRUCache(); lrucache.putEntry(1, 1); lrucache.putEntry(10, 15); lrucache.putEntry(15, 10); lrucache.putEntry(10, 16); lrucache.putEntry(12, 15); lrucache.putEntry(18, 10); lrucache.putEntry(13, 16); System.out.println(lrucache.getEntry(1)); System.out.println(lrucache.getEntry(10)); System.out.println(lrucache.getEntry(15)); } }