Hashcode como chave de registros em arquivo

4 respostas
Indiao

Amigos,

Estou fazendo um trabalho na faculdade e o pedido é que façamos um arquivo (*.txt) que guarde registros de clientes (cpf, nome, endereco, etc) em um arquivo e as chaves que identificam esse registro sejam calculadas atraves de funções de hash.

Pensei no seguinte:
-calcular o hashcode de um campo (cpf, por exemplo) e;
-usar o codigo gerado para indicar a posiçao onde esse registro ficará no arquivo de registros.

Gostaria de saber se estou no caminho certo, se alguem tem ideia de como seria implementado isso.

Grato!

4 Respostas

Z

Lembre que objetos diferentes podem ter o mesmo hashcode. Isso traria muitos problemas pro seu sistema.

ViniGodoy

A idéia não é legal.

  1. O hashcode pode se repetir entre diferentes objetos, como já foi dito;
  2. Objetos com hashcodes iguais também devem ser equals. Ou seja, se x.hashCode() == y.hashCode(), então, x.equals(y);
  3. O hashcode não é uma chave primária, conceitualmente. Preste sempre muita atenção na documentação do método que você está reaproveitando. Se o conceito dele não bater EXATAMENTE com a forma que você vai utiliza-lo, não o faça.

No caso de chaves, eu sempre recomendo que elas estejam sob o controle do programador. Por isso, não aconselharia o uso do CPF. O CPF está sob controle do governo e seu sistema pode ter algumas complicações se o governo mudar as regras de geração do número (vai que ele resolve reaproveitar CPFs cancelados, ou incluir letras também na parada).

Claro, como é um trabalho de faculdade e você não está preocupado com manutenções futuras, ok em usar o cpf, mas fica aí a dica. :wink:

T

Como é um trabalho de faculdade, provavelmente você terá de guardar o CPF de qualquer maneira, já que para um número suficientemente grande de CPFs haverá colisão do hash.
(É claro que você sabe tratar colisão em arquivos indexados por hash, não?)
É engraçado que um arquivo-texto seja tratado como um arquivo indexado por hash, mas como é trabalho de faculdade…
Para ficar mais fácil de testar a colisão, use uma função de hash bastante boba (como os dois últimos dígitos do CPF). Assim quase que fatalmente haverá uma colisão, e você terá de tratá-la.

W

vc deve organizar as linhas do arquivo da seguinte manira
cpf, nome, endereco, etc separado por virgula e só depois pensar como calcular.

Criado 10 de dezembro de 2006
Ultima resposta 12 de dez. de 2006
Respostas 4
Participantes 5