public Entry find(Object key) {

    try{
      int hash_code = key.hashCode();
      int comp_code = this.compFunction(hash_code);

      if (this.table[comp_code]==null){
        return null;
      }
      else{
        SList list_at_code = this.table[comp_code];
        int list_size = list_at_code.length();
        if (list_size == 1){
          Object entry_object = list_at_code.front().item();
          Entry entry = (Entry) entry_object;
          if(entry.key().equals(key)){
            return entry;
          }
          else{
            return null;
          }
        }
        else if (list_size == 0){
          return null;
        }
        else{
          ListNode current = list_at_code.front();
          while(current != list_at_code.back()){
            Object current_entry_object = current.item();
            Entry current_entry = (Entry) current_entry_object;
            if (current_entry.key().equals(key)){
              return current_entry;
            }
            else{
              current = current.next();
            }
          }
          Object back_entry_object = current.item();
          Entry back_entry = (Entry) back_entry_object;
          if (back_entry.key().equals(key)){
            return back_entry;
          }
        }
      }
    }
    catch (InvalidNodeException | NullPointerException e){
      return null;
    }
    return null;
  }