Olá pessoal!
Estou com um tabalho de faculdade pra fazer e estou tendo muita dificuldade, visto que java não é meu forte.
A situação é a seguinte:
existe um vetor com uma coleção de dados sobre 40 pessoas. Para cada pessoa são mantidos cpf, nome, idade e sexo.
A ideia é permitir o acesso aos dados sendo as chaves de busca o cpf ou nome. A tabela hash é de tamanho 13 e deve ter resolução de conflitos por lista encadeada.
Eu criei uma classe Pessoa com os devidos atributos, gets e sets. Criei uma outra classe vetorPessoas que possui um atributo vetor do tipo pessoa.
Eu já consigo tbm inserir dados nesse vetor.
Agora falta a parte da tabela hash… eu já li muito sobre isso mas não consigo monta-la.
Aguem pode me ajudar.
Você deve usar HashSet
E na classe Pessoa subscrever os métodos equals e hashCode
Acho que é isso que você quer, se não for, favor explicar novamente que eu não entendi
Obrigada Bruno! Vou tentar explicar melhor.
Não é permitido para esse trabalho utilizar os api’s Java. É pra fazer na unha, rsrsrs.
Eu tenho que criar uma tabela Hash de 13 posições, nela guardar a chave, a posição do vetor em que essa chave se encontra e um ponteiro. Visto que a resolução de conflito da tabela hash tem quer usando lista encadeada. Esse vetor do qual falei é o vetor de pessoas de 40 posições. Para cada pessoa são mantidos os seguintes dados: cpf, nome, enderço, etc…
Essa é minha classe pessoa:
public class Pessoa {
private int idade;
private String nome, sexo, endereco, CPF;
public String getCPF() {
return CPF;
}
public void setCPF(String CPF) {
this.CPF = CPF;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
}
Essa é minha tabelaHash:
public class TabelaHash {
//decçarando as variáveis
private Pessoa[] vetorPessoa;
private Nodo[] vetorHash;
private int size, soma, valorHash, position;
private String chave;
//criando a estrutura
private static class Nodo{
private String chave;
private int position;
private Nodo prox;
}
//construtora
public TabelaHash(int position){
this.size = 13;
this.vetorHash = new Nodo[size];
this.position = position;
}
//métodos
public int funcaoHash(String chave){
for(int i = 0; i<chave.length(); i ++){
soma = soma + chave.charAt(i);
valorHash = soma % 12;
}
return valorHash;
}
public void inserir(Nodo item){
chave = item.chave;
valorHash = funcaoHash(chave);
while(vetorHash[valorHash] != null){
vetorHash[valorHash].prox = new Nodo();
vetorHash[valorHash].prox.chave = new Nodo();
++valorHash;
}
}
public void remover(){
}
public Nodo pesquisa(String chave){
valorHash = funcaoHash(chave);
while(vetorHash[valorHash] != null){
if(vetorHash[valorHash].chave.equals(chave)){
}
}
}
}
Ela ainda não está pronta, pois é ai que está minha dificuldade. Qdo eu inserir uma pessoa no vetor pessoa, eu tenho que quagar a chave(nome ou cpf) a posição do vetor na qual a pessoa foi inserida e o apontador para o proximo nodo. Visto que qdo meu hash der igual a 0, por exemplo na segunda vez, eu aloco um novo espaço e armazeno a segunda informação… Confuso, não? Esse é o meu main, por enquanto, pois a inserção no vetor de pessoas tem que ser via teclado ou lendo de uma arquivo.
public class Main {
private static String line;
private static String[] vetorDados;
private static Pessoa[] vetorPessoa = new Pessoa[40];
public static void main(String[] args){
Pessoa pessoa = new Pessoa();// cria objeto pessoa
pessoa.setNome("João");
pessoa.setCPF("05155433657");
pessoa.setEndereco("teste");
pessoa.setIdade(15);
pessoa.setSexo("Masculino");
VetorPessoas lista = new VetorPessoas();
lista.adiciona(pessoa);
TabelaHash tabela = new TabelaHash(lista.getTotalDePessoas());
TabelaHash[] vetorHash = new TabelaHash[13];
//System.out.print(lista);
System.out.print(lista);
}
}
Acho que com o codigo e vendo os meus erros, kkk, vai entender, espero!
Obrigada!>