Blossomforth icon

HashCache

Blossomforth | PRO | 03/19/16 05:15:50 PM UTC | 0 ⭐ | 253 👁️ | Never ⏰ | []
Java |

1.02 KB

|

None

|

0 👍

/

0 👎

package me.corriekay.simplymodular.util;
 
import java.util.HashMap;
import java.util.Map;
 
import com.google.common.collect.MapMaker;
import com.google.inject.Provider;
 
/**
 * HashCache is a cache designed to store both strong and weak references to objects. This is designed to help with data concurrency.
 * @author Corrie
 */
public class HashCache<K, V> {
    private final Map<K, V> map = new HashMap<>();
    private final Map<K, V> cache = new MapMaker().weakValues().makeMap();
    
    public V get(K k) {
        if(cache.containsKey(k)) return cache.get(k);
        return map.get(k);
    }
    
    public V optGet(K k, Provider<V> p) {
        V v = get(k);
        if(v == null) {
            v = p.get();
            cache.put(k, v);
        }
        return v;
    }
    
    public void put(K k, Provider<V> p) {
        if(!cache.containsKey(k)) {
            V v = p.get();
            cache.put(k, v);
            map.put(k, v);
        } else {
            map.put(k, cache.get(k));
        }
    }
    
    public void remove(K k) {
        map.remove(k);
    }
    
    public void hardRemove(K k) {
        remove(k);
        cache.remove(k);
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎