1 33 34 package edu.rice.cs.util; 35 import java.util.*; 36 37 public class OrderedBidirectionalHashMap<Type1, Type2> extends BidirectionalHashMap<Type1, Type2> { 38 private ArrayList<Type2> order = new ArrayList<Type2>(); 39 40 public OrderedBidirectionalHashMap() { super(); } 41 42 public void put(Type1 key, Type2 value) { 43 super.put(key, value); 44 order.add(value); 45 } 46 47 public Type2 removeValue(Type1 key) { 48 Type2 value = super.removeValue(key); 49 order.remove(value); 50 return value; 51 } 52 53 public Type1 removeKey(Type2 value) { 54 Type1 key = super.removeKey(value); 55 order.remove(value); 56 return key; 57 } 58 59 public Iterator<Type2> valuesIterator() { return new OBHMIterator(); } 60 61 public Collection<Type2> values() { return order; } 62 63 public void clear() { 64 super.clear(); 65 order.clear(); 66 } 67 68 69 class OBHMIterator implements Iterator<Type2> { 70 71 Iterator<Type2> it = order.iterator(); 72 74 75 Type1 lastKey = null; 76 Type2 lastValue = null; 77 78 public boolean hasNext() { return it.hasNext(); } 79 80 public Type2 next() { 81 lastValue = it.next(); 82 return lastValue; 83 } 84 85 86 public void remove() { 87 it.remove(); 88 lastKey = backward.get(lastValue); 89 forward.remove(lastKey); 90 backward.remove(lastValue); 91 lastValue = null; 92 } 93 } 94 } 95 | Popular Tags |