1 // Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
3 package edu.berkeley.slipway.mpar;
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 int size(K k) {
24 HashSet<V> ret = hm.get(k);
25 return ret==null ? 0 : ret.size();
27 public HashSet<V> getAll(K k) {
28 HashSet<V> ret = hm.get(k);
29 if (ret==null) return new HashSet<V>();
33 public void remove(K k, V v) {
34 if (hm.get(k)==null) return;
35 HashSet<V> hs = hm.get(k);
42 public void removeAll(K k, Iterable<V> iv) {
43 for(V v : iv) remove(k, v);
46 public void clear() { hm.clear(); }
48 public boolean contains(K k, V v) {
49 return hm.get(k)!=null && hm.get(k).contains(v);
52 public void addAll(HashMapBag<K,V> hmb) {
53 for(K k : hmb) addAll(k, hmb.getAll(k));
55 public void removeAll(HashMapBag<K,V> hmb) {
56 for(K k : hmb) removeAll(k, hmb.getAll(k));
59 public Iterator<K> iterator() { return hm.keySet().iterator(); }
60 public int size() { return size; }