From a9390783df7d256ce5adeb149b28d35f35e4e3ec Mon Sep 17 00:00:00 2001 From: "omar.mahamid" Date: Sat, 14 Jan 2023 15:50:13 +0200 Subject: [PATCH 1/3] S-12345-add-new-ds-lru-cache --- .../williamfiset/algorithms/datastructures/cache/LRUCache.java | 2 ++ .../algorithms/datastructures/hashtable/CukooHashing.java | 2 ++ .../com/williamfiset/algorithms/sorting/ParallelBubbleSort.java | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java create mode 100644 src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java create mode 100644 src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java diff --git a/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java b/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java new file mode 100644 index 000000000..55213b3b5 --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java @@ -0,0 +1,2 @@ +package com.williamfiset.algorithms.datastructures.cache;public class LRUCache { +} diff --git a/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java b/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java new file mode 100644 index 000000000..19fa2e140 --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java @@ -0,0 +1,2 @@ +package com.williamfiset.algorithms.datastructures.hashtable;public class CukooHashing { +} diff --git a/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java b/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java new file mode 100644 index 000000000..b9dd7635b --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java @@ -0,0 +1,2 @@ +package com.williamfiset.algorithms.sorting;public class ParallelBubbleSort { +} From 1933979566b3a7c6afe3bbf1254c0fb0bc7ef6b0 Mon Sep 17 00:00:00 2001 From: "omar.mahamid" Date: Sat, 14 Jan 2023 15:52:07 +0200 Subject: [PATCH 2/3] S-12345-add-new-ds-lru-cache --- .../datastructures/cache/LRUCache.java | 89 ++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java b/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java index 55213b3b5..e4cc1a127 100644 --- a/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java +++ b/src/main/java/com/williamfiset/algorithms/datastructures/cache/LRUCache.java @@ -1,2 +1,89 @@ -package com.williamfiset.algorithms.datastructures.cache;public class LRUCache { +package com.williamfiset.algorithms.datastructures.cache; + +import java.util.HashMap; +import java.util.Map; + +public class LRUCache{ + + private final Map> map = new HashMap<>(); + private final Node head; + private final Node last; + private final int capacity; + + public LRUCache(int capacity){ + this.capacity = capacity; + head = new Node<>(null,null); + last = new Node<>(null,null); + head.next = last; + last.prev = head; + } + + public V get(K key){ + Node node = map.get(key); + if (node == null){ + return null; + } + remove(node); + insert(node); + return node.value; + } + + + public void put(K key, V value) { + if (map.containsKey(key)) { + remove(map.get(key)); + } + if (map.size() == capacity) { + remove(last.prev); + } + insert(new Node<>(key, value)); + } + + private void insert(Node node) { + map.put(node.key, node); + node.next = head.next; + head.next.prev = node; + node.prev = head; + head.next = node; + } + + private void remove(Node node) { + map.remove(node.key); + node.prev.next = node.next; + node.next.prev = node.prev; + } + + + private static class Node{ + K key; + V value; + Node prev; + Node next; + + public Node(K key, V value){ + this.key = key; + this.value = value; + } + } + + @Override + public String toString() { + return "LRUCache{" + + map.keySet() + + '}'; + } + + public static void main(String[] args) { + LRUCache lruCache = new LRUCache<>(3); + lruCache.put(1,1); + lruCache.put(2,2); + lruCache.put(3,3); + + lruCache.put(4,4); + + //should print 2,3,4 + System.out.println(lruCache); + + } + } From b8a6168ef08aa7d672ecf649a2cc95fb6ea21340 Mon Sep 17 00:00:00 2001 From: "omar.mahamid" Date: Sat, 14 Jan 2023 15:53:33 +0200 Subject: [PATCH 3/3] S-12345-add-new-ds-lru-cache --- .../algorithms/datastructures/hashtable/CukooHashing.java | 2 -- .../com/williamfiset/algorithms/sorting/ParallelBubbleSort.java | 2 -- 2 files changed, 4 deletions(-) delete mode 100644 src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java delete mode 100644 src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java diff --git a/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java b/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java deleted file mode 100644 index 19fa2e140..000000000 --- a/src/main/java/com/williamfiset/algorithms/datastructures/hashtable/CukooHashing.java +++ /dev/null @@ -1,2 +0,0 @@ -package com.williamfiset.algorithms.datastructures.hashtable;public class CukooHashing { -} diff --git a/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java b/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java deleted file mode 100644 index b9dd7635b..000000000 --- a/src/main/java/com/williamfiset/algorithms/sorting/ParallelBubbleSort.java +++ /dev/null @@ -1,2 +0,0 @@ -package com.williamfiset.algorithms.sorting;public class ParallelBubbleSort { -}