@Override public boolean containsKey(Object key) { processQueue(); return map.containsKey(key); }
@Override public int size() { processQueue(); return map.size(); }
@Override public void clear() { processQueue(); map.clear(); }
@Override public V get(Object key) { processQueue(); ValueRef<K, V> ref = map.get(key); if (ref != null) return ref.get(); return null; }
@Override public V remove(Object key) { processQueue(); ValueRef<K, V> result = map.remove(key); if (result != null) return result.get(); return null; }
@Override public Set<Entry<K,V>> entrySet() { processQueue(); return new EntrySet(); }
@Override public V put(K key, V value) { processQueue(); ValueRef<K, V> ref = create(key, value, queue); ValueRef<K, V> result = map.put(key, ref); if (result != null) return result.get(); return null; }