@Override public int size() { purgeKeys(); return map.size(); }
@Override public Collection<V> values() { purgeKeys(); return map.values(); }
@Override public boolean isEmpty() { purgeKeys(); return map.isEmpty(); }
@Override public void clear() { purgeKeys(); map.clear(); }
@Override public V put(final K key, final V value) { purgeKeys(); return map.put(newKey(key), value); }
@Override public boolean remove(final Object key, final Object value) { purgeKeys(); return map.remove(new WeakReference<>(key, null), value); }
@Override public boolean containsKey(final Object key) { purgeKeys(); return map.containsKey(new WeakReference<>(key, null)); }
@Override public void putAll(final Map<? extends K, ? extends V> m) { purgeKeys(); for (Entry<? extends K, ? extends V> entry : m.entrySet()) { map.put(newKey(entry.getKey()), entry.getValue()); } }
@Override public V putIfAbsent(final K key, final V value) { purgeKeys(); return map.putIfAbsent(newKey(key), value); }
@Override public boolean replace(final K key, final V oldValue, final V newValue) { purgeKeys(); return map.replace(newKey(key), oldValue, newValue); }
@Override public V replace(final K key, final V value) { purgeKeys(); return map.replace(newKey(key), value); }
@Override public boolean containsValue(final Object value) { purgeKeys(); return map.containsValue(value); }
@Override public V get(final Object key) { purgeKeys(); return map.get(new WeakReference<>(key, null)); }
@Override public V remove(final Object key) { purgeKeys(); return map.remove(new WeakReference<>(key, null)); }
@Override public void clear() { purgeKeys(); map.clear(); }
@Override public boolean isEmpty() { purgeKeys(); return map.isEmpty(); }
@Override public boolean replace(final K key, final V oldValue, final V newValue) { purgeKeys(); return map.replace(newKey(key), oldValue, newValue); }
@Override public V replace(final K key, final V value) { purgeKeys(); return map.replace(newKey(key), value); }
@Override public boolean containsKey(final Object key) { purgeKeys(); return map.containsKey(new WeakReference<>(key, null)); }
@Override public boolean containsValue(final Object value) { purgeKeys(); return map.containsValue(value); }