package edu.fudan.util;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Map.Entry;
public class MultiValueMap<K, V> implements Map<K, V> {
TreeMap<K, TreeSet<V>> map;
public MultiValueMap() {
map = new TreeMap<K, TreeSet<V>>();
}
@Override
public int size() {
return map.size();
}
@Override
public boolean isEmpty() {
return map.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return map.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
System.err.println("Not Implimented Yet!");
return false;
}
@Override
public V get(Object key) {
System.err.println("Not Implimented Yet!");
return null;
}
public TreeSet<V> getSet(Object key) {
return map.get(key);
}
@Override
public V put(K key, V value) {
TreeSet<V> set = map.get(key);
if(value==null){
map.put(key, null);
return null;
}
if(set == null) {
set = new TreeSet<V>();
map.put(key, set);
}
set.add(value);
return null;
}
@Override
public V remove(Object key) {
System.err.println("Not Implimented Yet!");
return null;
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
System.err.println("Not Implimented Yet!");
}
@Override
public void clear() {
System.err.println("Not Implimented Yet!");
}
@Override
public Set<K> keySet() {
return map.keySet();
}
@Override
public Collection<V> values() {
System.err.println("Not Implimented Yet!");
return null;
}
public Collection<TreeSet<V>> valueSets() {
return map.values();
}
@Override
public Set<Entry<K, V>> entrySet() {
System.err.println("Not Implimented Yet!");
return null;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Iterator<Entry<K, TreeSet<V>>> it1 = map.entrySet().iterator();
while(it1.hasNext()){
Entry<K, TreeSet<V>> entry = it1.next();
sb.append(entry.getKey());
sb.append("\t");
TreeSet<V> val = entry.getValue();
if(val==null){
if(it1.hasNext())
sb.append("\n");
continue;
}
Iterator<V> it = val.iterator();
while (it.hasNext()) {
V en = it.next();
sb.append(en);
if(it.hasNext())
sb.append("\t");
}
if(it1.hasNext())
sb.append("\n");
}
return sb.toString();
}
}