Hashcode como chave de registros em arquivo

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!

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

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:

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.

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