code: @Override
    public Set<Entry<K, Collection<V>>> entrySet() {
      return new AbstractSet<Entry<K, Collection<V>>>() {
        @Override
        public Iterator<Map.Entry<K, Collection<V>>> iterator() {
          Filter<Map.Entry<K, Collection<V>>> filter1 = new Filter<Map.Entry<K, Collection<V>>>() {
            private static final long serialVersionUID = -3257173354412718639L;
  
            // only accepts stuff not overwritten by deltaMap
            public boolean accept(Map.Entry<K, Collection<V>> e) {
              K key = e.getKey();
              if (deltaMap.containsKey(key)) {
                return false;
              }
              return true;
            }
          };
  
          Iterator<Map.Entry<K, Collection<V>>> iter1 = new FilteredIterator<Map.Entry<K, Collection<V>>>(originalMap.entrySet().iterator(), filter1);
  
          Filter<Map.Entry<K, Collection<V>>> filter2 = new Filter<Map.Entry<K, Collection<V>>>() {
            private static final long serialVersionUID = 1L;
  
            // only accepts stuff not overwritten by deltaMap
            public boolean accept(Map.Entry<K, Collection<V>> e) {
              if (e.getValue() == removedValue) {
                return false;
              }
              return true;
            }
          };
  
  
          Iterator<Map.Entry<K, Collection<V>>> iter2 = new FilteredIterator<Map.Entry<K, Collection<V>>>(deltaMap.entrySet().iterator(), filter2);
  
          return new ConcatenationIterator<Map.Entry<K, Collection<V>>>(iter1, iter2);
        }
  
        @Override
        public int size() {
          int size = 0;
          for (// @SuppressWarnings("unused")  // this makes javac v1.5 barf!!
               Entry<K, Collection<V>> entry : this) {
            ErasureUtils.noop(entry);
            size++;
          }
          return size;
        }
      };
    }
docs: This is cheap.
  
  @return a set view of the mappings contained in this map.