code: public Set<Map.Entry<A,B>> entrySet() {
  	return new AbstractSet<Map.Entry<A,B>>() {
  	    public int size() {
  		return map.size();
  	    }
  	    public Iterator<Map.Entry<A,B>> iterator() {
  		return new Iterator<Map.Entry<A,B>>() {
  		    private final Iterator<Map.Entry<A,B>> it = map.entrySet().iterator();
  		    private Map.Entry<A,B> last = null;
  		    public boolean hasNext() {
  			return it.hasNext(); 
  		    }
  		    public Map.Entry<A,B> next() { 
  		        last = it.next();
  			return last;
  		    }
  		    public void remove() {
  			it.remove();
  			revMap.remove(last.getValue());
  		    }
  		};
  	    }
  	    public boolean remove(Object o) {
  		if(!(o instanceof Map.Entry/*<A,B>*/)) return false;
  		@SuppressWarnings("unchecked")
  		Map.Entry<A,B> entry = (Map.Entry<A,B>) o;
  		B currValue = BijMap.this.get(entry.getKey());
  		if((currValue == null) || !currValue.equals(entry.getValue())) return false;
  		BijMap.this.remove(entry.getKey());
  		return true;
  	    }
  	    public void clear() {
  		BijMap.this.clear();
  	    }
  	};
      }
docs: Returns a set view of the entries from this
  <code>BijMap</code>.  The view is fully functional (i.e.,
  allows mutation) and connected to this bijective map (i.e.,
  changes in one of them are reflected in the other one).