docs: @Override
    public Set<Entry<K, V>> entrySet() {
      expungeStaleEntries();
      Set<Entry<K, V>> result = new LinkedHashSet<>();
      for (final Entry<K, SoftReference<V>> entry : hash.entrySet()) {
        final V value = entry.getValue().get();
        if (value != null) {
          result.add(new Entry<K, V>() {
            @Override
            public K getKey() {
              return entry.getKey();
            }
  
            @Override
            public V getValue() {
              return value;
            }
  
            @Override
            public V setValue(V v) {
              entry.setValue(new SoftReference<>(v, queue));
              return value;
            }
          });
        }
      }
      return result;
    }