MultiMap

generics な継承とか。

import java.util.*;

interface MultiMap<K,V> extends Map<K,Set<V>>
{
    boolean put(K key, V value);
}

class MultiHashMap<K,V> extends HashMap<K,Set<V>> implements MultiMap<K,V>
{
    public boolean put(K key, V value)
    {
Set<V> s = get(key);
if ( s == null ) {
    s = new HashSet<V>();
    put(key, s);
}
return s.add(value);
    }
}

MultiMap<String,String> mmap = new MultiHashMap<String, String>();
mmap.put("ABC", "Abc");
mmap.put("ABC", "aBc");
mmap.put("ABC", "abC");
mmap.put("ABC", "Abc");
System.out.println(mmap);    //  ==>   {ABC=[aBc, abC, Abc]}

Vの配列を作ろうとして若干はまったので、メモ。