title: Implement dictionary using Java
body: <p>Task
  Dictionary ADT</p>
  
  <ul>
  <li>The dictionary ADT models a searchable collection of key-element entries</li>
  <li>Multiple items with the same key are allowed</li>
  <li>Applications: word-definition pairs</li>
  </ul>
  
  <p>Dictionary ADT methods:</p>
  
  <ul>
  <li>find(k): if the dictionary has an entry with key k, returns it, else, returns null</li>
  <li>findAll(k): returns an iterator of all entries with key k</li>
  <li>insert(k, o): inserts and returns the entry (k, o)</li>
  <li>remove(e): remove the entry e from the dictionary</li>
  <li>size(), isEmpty()</li>
  </ul>
  
  <p>Operation Output Dictionary</p>
  
  <pre><code>insert(5,A) (5,A) (5,A)
  insert(7,B) (7,B) (5,A),(7,B)
  insert(2,C) (2,C) (5,A),(7,B),(2,C)
  insert(8,D) (8,D) (5,A),(7,B),(2,C),(8,D)
  insert(2,E) (2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
  find(7) (7,B) (5,A),(7,B),(2,C),(8,D),(2,E)
  find(4) null (5,A),(7,B),(2,C),(8,D),(2,E)
  find(2) (2,C) (5,A),(7,B),(2,C),(8,D),(2,E)
  findAll(2) (2,C),(2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
  size() 5 (5,A),(7,B),(2,C),(8,D),(2,E)
  remove(find(5)) (5,A) (7,B),(2,C),(8,D),(2,E)
  find(5) null (7,B),(2,C),(8,D),(2,E)
  </code></pre>
  
  <p>Detailed explanation: NO</p>