1 // Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
3 package edu.berkeley.sbp.util;
6 /** a mapping from keys of type <tt>K</tt> to <i>sets</i> of values of type <tt>T</tt> */
7 public final class HashMapBag<K,V> implements MapBag<K,V> {
9 private final HashMap<K,HashSet<V>> hm = new HashMap<K,HashSet<V>>();
11 public void add(K k, V v) {
12 HashSet<V> hs = hm.get(k);
13 if (hs==null) hm.put(k, hs = new HashSet<V>());
19 public void addAll(K k, Iterable<V> iv) {
20 for(V v : iv) add(k, v);
23 public HashSet<V> getAll(K k) {
24 HashSet<V> ret = hm.get(k);
25 if (ret==null) return new HashSet<V>();
29 public void remove(K k, V v) {
30 if (hm.get(k)==null) return;
31 HashSet<V> hs = hm.get(k);
38 public void removeAll(K k, Iterable<V> iv) {
39 for(V v : iv) remove(k, v);
42 public void clear() { hm.clear(); }
44 public boolean contains(K k, V v) {
45 return hm.get(k)!=null && hm.get(k).contains(v);
48 public void addAll(HashMapBag<K,V> hmb) {
49 for(K k : hmb) addAll(k, hmb.getAll(k));
51 public void removeAll(HashMapBag<K,V> hmb) {
52 for(K k : hmb) removeAll(k, hmb.getAll(k));
55 public Iterator<K> iterator() { return hm.keySet().iterator(); }
56 public int size() { return size; }