1 package edu.berkeley.sbp.util;
4 /** a mapping from keys of type <tt>K</tt> to <i>sets</i> of values of type <tt>T</tt> */
5 public final class HashMapBag<K,V> implements MapBag<K,V> {
7 private final HashMap<K,HashSet<V>> hm = new HashMap<K,HashSet<V>>();
9 public void add(K k, V v) {
10 HashSet<V> hs = hm.get(k);
11 if (hs==null) hm.put(k, hs = new HashSet<V>());
17 public void addAll(K k, Iterable<V> iv) {
18 for(V v : iv) add(k, v);
21 public HashSet<V> getAll(K k) {
22 HashSet<V> ret = hm.get(k);
23 if (ret==null) return new HashSet<V>();
27 public void remove(K k, V v) {
28 if (hm.get(k)==null) return;
29 HashSet<V> hs = hm.get(k);
36 public void removeAll(K k, Iterable<V> iv) {
37 for(V v : iv) remove(k, v);
40 public void clear() { hm.clear(); }
42 public boolean contains(K k, V v) {
43 return hm.get(k)!=null && hm.get(k).contains(v);
46 public void addAll(HashMapBag<K,V> hmb) {
47 for(K k : hmb) addAll(k, hmb.getAll(k));
49 public void removeAll(HashMapBag<K,V> hmb) {
50 for(K k : hmb) removeAll(k, hmb.getAll(k));
53 public Iterator<K> iterator() { return hm.keySet().iterator(); }
54 public int size() { return size; }