public interface Dictionary<K, V> extends Iterable<K> {

  /** Reinitialize dictionary */
  public void clear();

  /**
   * Insert a record
   *
   * @param key The key for the value being inserted.
   * @param value The value being inserted.
   */
  public void put(K key, V value);

  /**
   * Remove and return a record.
   *
   * @param key The key of the record to be removed.
   * @return The matching record. Return null if no record with this key exists.
   */
  public V remove(K key);

  /**
   * @return The value matching the key (null if none exists).
   * @param k The key of the record to find.
   */
  public V get(K key);

  /** Return The number of records in the dictionary. */
  public int size();

}
