
public class Hash {
   int tabela[];
   int m;
   final int NULO = -1;

   public Hash() {
      this(13);
   }

   public Hash(int m) {
      this.m = m;
      this.tabela = new int[this.m];
      for (int i = 0; i < m; i++) {
         tabela[i] = NULO;
      }
   }

   public int h(int elemento) {
      return elemento % m;
   }

   public int reh(int elemento) {
      return ++elemento % m;
   }

   public boolean inserir(int elemento) {
      boolean resp = false;
      if (elemento != NULO) {
         int pos = h(elemento);
         if (tabela[pos] == NULO) {
            tabela[pos] = elemento;
            resp = true;
         } else {
            pos = reh(elemento);
            if (tabela[pos] == NULO) {
               tabela[pos] = elemento;
               resp = true;
            }
         }
      }
      return resp;
   }

   public boolean pesquisar(int elemento) {
      boolean resp = false;
      int pos = h(elemento);
      if (tabela[pos] == elemento) {
         resp = true;
      } else if (tabela[pos] != NULO) {
         pos = reh(elemento);
         if (tabela[pos] == elemento) {
            resp = true;
         }
      }
      return resp;
   }

   boolean remover(int elemento) {
      boolean resp = false;
      // ...
      return resp;
   }
}
