import java.util.List;

/** A Map (Dictionary) just like Java's Map<K,V> interface except that
 * this interface has 2 keys instead of just one. Otherwise it works
 * the same way.
 */
public interface DoubleKeyMap<K1,K2,V> {
    /** Add (key1,key2,value) to dictionary, overwriting previous value if any.
     *  key1, key2, and value must all be non-null.
     *  @return the previous value associated with <tt>key</tt>, or
     * <tt>null</tt> if there was no mapping for <tt>key</tt>.
     */
    V put(K1 key1, K2 key2, V value);

    /** Return the value associated with (key1, key2). Return null if
     *  no value exists for those keys.
     *  key1, key2 must be non-null.
     */
    V get(K1 key1, K2 key2);

    /** Remove a value if present. Return previous value if any. */
    V remove(K1 key1, K2 key2);

    /** Return true if there is a value associated with the 2 keys
     *  else return false.
     *  key1, key2 must be non-null.
     */
    boolean containsKey(K1 key1, K2 key2);

    /** Return list of a values in the map/dictionary.  Return null
	 *  if there are no values.
	 */
    List<V> values();

    /** Return how many elements there are in the dictionary. */
    int size();

    /** Reset the dictionary so there are no elements. This method
     * might or might not throw out memory and rebuild the
     * dictionary.
     */
    void clear();
}

@@ -276,32 +276,40 @@
 writing previous
+%0A     * 
  value if any.%0A 
@@ -306,23 +306,16 @@
  if any.
-%0A     *
   key1, 
@@ -348,24 +348,80 @@
 e non-null.%0A
+     *  If any is null, throw IllegalArgumentException.%0A
      *  @ret
@@ -539,16 +539,24 @@
 y%3C/tt%3E.%0A
+     * %0A
      */%0A
@@ -703,23 +703,16 @@
 se keys.
-%0A     *
   key1, 
@@ -726,32 +726,247 @@
 st be non-null.%0A
+     *  If any is null, throw IllegalArgumentException.  The value%0A     *  should be just the value added by the user via put(), and%0A     *  should not contain any of your internal bookkeeping%0A     *  data/records.%0A
      */%0A    V ge
@@ -1051,16 +1051,56 @@
  if any.
+%0A     *  Do nothing if not present.%0A    
  */%0A    
@@ -1254,24 +1254,57 @@
 be non-null.
+ If either is null, return false.
 %0A     */%0A   
@@ -1411,17 +1411,29 @@
 urn 
-null%0A%09 * 
+an%0A     *  empty list
  if 
@@ -1456,10 +1456,166 @@
 ues.
-%0A%09
+  The values should be just%0A     *  the values added by the user via put(), and should not contain%0A     *  any of your internal bookkeeping data/records.%0A    
  */%0A
@@ -1777,103 +1777,8 @@
 nts.
- This method%0A     * might or might not throw out memory and rebuild the%0A     * dictionary.%0A    
  */%0A

tweak comments in interface