diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java index 30a8059dc24..c12997fffe8 100644 --- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java +++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java @@ -115,19 +115,14 @@ public V get(K key, Function function) { } } - @Override public void put(K key, V thing) { Objects.requireNonNull(key); - final int idx = calcIndex(key); - if(thing == null) { //null value causes removal of entry - if (keys[idx] != null) { - keys[idx] = null; - values[idx] = null; - currentSize--; - } + if (thing == null) { + remove(key); return; } + final int idx = calcIndex(key); if(!thing.equals(values[idx])) { values[idx] = thing; } diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/TestCacheSimple.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/TestCacheSimple.java index 81c0c0f4276..a3db7546e08 100644 --- a/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/TestCacheSimple.java +++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/TestCacheSimple.java @@ -32,7 +32,7 @@ public class TestCacheSimple { /** * Simple test to ensure that {@link CacheSimple} evidences - * the fixed-size behavior we desire. + * the fixed-size behaviour we desire. */ @Test public void testFixedSize() { @@ -208,6 +208,24 @@ public void testRemove() { } } + @Test + public void testRemoveSameHash() { + CompoundKey key1 = new CompoundKey(1, 1); + CompoundKey key2 = new CompoundKey(1, 2); + String value1 = "v1"; + String value2 = "v2"; + + Cache cache = new CacheSimple<>(10); + + cache.put(key1, value1); + // Delete - different key + cache.put(key2, null); + String s = cache.getIfPresent(key1); + + assertEquals(1, cache.size()); + assertEquals(value1, s); + } + @Test public void testGet() { Cache cache = new CacheSimple<>(10); @@ -325,7 +343,7 @@ public void testAllocatedSize() { assertEquals(16, cache.getAllocatedSize()); } - // Compound key for tests. + // Compound key for tests. private static final class CompoundKey { private final int a; private final int b;