@@ -0,0 +1,2241 @@
+package net.sf.kerner.utils.collections.map.impl;%0A%0Aimport java.util.Collection;%0Aimport java.util.HashMap;%0Aimport java.util.Map;%0Aimport java.util.Set;%0A%0Aimport net.sf.kerner.utils.math.UtilMath;%0A%0Apublic class MapCount%3CT%3E implements Map%3CT, Integer%3E %7B%0A%0A    private final Map%3CT, Integer%3E delegate;%0A%0A    public MapCount() %7B%0A        this.delegate = new HashMap%3CT, Integer%3E();%0A    %7D%0A%0A    public MapCount(final Map%3CT, Integer%3E delegate) %7B%0A        this.delegate = delegate;%0A    %7D%0A%0A    public void clear() %7B%0A        delegate.clear();%0A    %7D%0A%0A    public boolean containsKey(final Object key) %7B%0A        return delegate.containsKey(key);%0A    %7D%0A%0A    public boolean containsValue(final Object value) %7B%0A        return delegate.containsValue(value);%0A    %7D%0A%0A    public Set%3Cjava.util.Map.Entry%3CT, Integer%3E%3E entrySet() %7B%0A        return delegate.entrySet();%0A    %7D%0A%0A    @Override%0A    public boolean equals(final Object o) %7B%0A        return delegate.equals(o);%0A    %7D%0A%0A    public Integer get(final Object key) %7B%0A        return delegate.get(key);%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return delegate.hashCode();%0A    %7D%0A%0A    public boolean isEmpty() %7B%0A        return delegate.isEmpty();%0A    %7D%0A%0A    public Set%3CT%3E keySet() %7B%0A        return delegate.keySet();%0A    %7D%0A%0A    public synchronized Integer put(final T key) %7B%0A        if (key != null) %7B%0A            final int i = 0;%0A        %7D%0A        final Integer value = delegate.get(key);%0A        if (value != null) %7B%0A            return delegate.put(key, UtilMath.increment(value));%0A        %7D else %7B%0A            return delegate.put(key, Integer.valueOf(1));%0A        %7D%0A    %7D%0A%0A    public Integer put(final T key, final Integer value) %7B%0A        if (value.intValue() %3C= 1) %7B%0A            throw new IllegalArgumentException();%0A        %7D%0A        return delegate.put(key, value);%0A    %7D%0A%0A    public void putAll(final Map%3C? extends T, ? extends Integer%3E m) %7B%0A        delegate.putAll(m);%0A    %7D%0A%0A    public Integer remove(final Object key) %7B%0A        return delegate.remove(key);%0A    %7D%0A%0A    public int size() %7B%0A        return delegate.size();%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        return delegate.toString();%0A    %7D%0A%0A    public Collection%3CInteger%3E values() %7B%0A        return delegate.values();%0A    %7D%0A%0A%7D%0A

Introduce MapCount.