Dúvida sobre tabela Hash com lista encadeada

2 respostas
Trinity

Pessoal,

sou iniciante em POO, Java…

tenho q implementar uma tabela hash, até aí td bem, os métodos de inserir e buscar stão funcionando direitinho…

…mas qndo peço pra mostrar uma lista de itens da lista que tenham um determinado campo com o mesmo conteúdo, só mostra o primeiro!!! :cry:

Estive conversando com um colega e ele de disse q está ocorrendo colisões e que eu tenho que criar um vetor de listas. Só que eu não tenho a menor idéia de como vou fazer isso!

Alguém pode me dar uma luz? :idea:

2 Respostas

jwalker

Posso te ajudar, tem como colar teu código aqui para o pessoal do furum ?

se puder me mandar por email tambem seria bom: [email removido]

Abraços!

Trinity
public class TabelaHash {
    private Candidato[] vetorHash;
    private int tamanhoDoVetor;
    
public TabelaHash(int size){
    tamanhoDoVetor = size;
    vetorHash = new Candidato[tamanhoDoVetor];
    }

public void mostraTabela(){
    System.out.println("Tabela: ");
    
    for(int j=0; j < tamanhoDoVetor; j++)
         {
         if(vetorHash[j] != null)
            System.out.println(vetorHash[j].nome);
         }
      System.out.println("");
      
    }

public int funcaoHash(String chave){
   int valorHash = 0;
   
   
   for (int j = 1; j < chave.length(); j++){
      int letra = chave.charAt(j) - 96;
      valorHash = (valorHash * 27 + letra) % tamanhoDoVetor;
        }
   return valorHash;
    }

public void insert(Candidato item){
    String chave = item.cargo;
    int valorHash = funcaoHash(chave);
    
    while (vetorHash[valorHash] != null){
        ++valorHash;
        valorHash %= tamanhoDoVetor;
        }
    vetorHash[valorHash] = item;
    }

public Candidato find(String chave){
    int valorHash = funcaoHash(chave);
    
    while(vetorHash[valorHash] != null){
        if(vetorHash[valorHash].cargo.equals(chave))
            return vetorHash[valorHash];
        ++valorHash;
        valorHash %= tamanhoDoVetor;
        }
    return null;
    }
}

Até aki ta td bem...esses métodos estão funcionando, agora esse daki...q deveria mostrar uma lista de pessoas com o mesmo atributo cargo,
só mostra o primeiro! :(

public void mostraListaDaTabela(String chave){
    int valorHash = funcaoHash(chave);
    
    System.out.println("Lista: ");
    
    for(int j=0; j < tamanhoDoVetor; j++)
         {
         while(vetorHash[valorHash].cargo.equals(chave)){
                System.out.println(vetorHash[valorHash].nome);
                ++valorHash;
                valorHash %= tamanhoDoVetor;
            }
}
Criado 9 de dezembro de 2008
Ultima resposta 10 de dez. de 2008
Respostas 2
Participantes 2