[quote=felipe_gdr]bbviana, acho que vc foi o único que entendeu minha dúvida.
Mas sua explicação é justamente o meu questionamento.
Partindo-se do princípio que buscas em Collection possuem 2 etapas (primeiro a pesquisa pelo hashcode, e depois a pesquisa entre todos os objetos que possuem esse hashcode, através do método equals())
Se existirem 1000 objetos, com 1000 hashcodes diferentes. Ao fazer uma pesquisa na Collection teria que ser realizado uma busca nesses 1000 hashcodes, para então achar o objeto procurado.
Por outro lado, se existirem 1000 objetos com apenas 1 hashcode, a primeira etapa da busca não ocorreria, já que temos apenas 1 hashcode. Mas teríamos que pesquisar entre os nossos 1000 objetos…
certo? do mesmo jeito faríamos uma pesquisa entre 1000 elementos?! viajei?[/quote]
É que não é bem assim que o hashcode é implementado. Não pense em Collection, pense em vetor(array) Um vetor com ponteiros para listas(ligadas). Vou tentar desenhar:
[0] -> [L0]-> [L0]
[1] -> [L1]-> [L1]-> [L1]-> [L1]-> [L1]-> [L1]
[2] -> [L2]-> [L2]-> [L2]-> [L2] -> [L2]
[3]-> [L3]
Na vertical, temos o vetor, com indices de 0 a 3, que sao os hashcodes. Cada posição desse vetor aponta para uma lista L.
O hashcode funciona assim: Descoberto o hshcode, vc busca no vetor o indice correspondente. Se seu hashcode for 2, vc vai na posição 2 do vetor. Essa posição apontará pra uma lista, no caso a L2. Veja que a L2 tem 5 elementos. Se esses 5 elementos forem diferentes, vc terá q descobrir, comparando um a um, qual deles vc quer. Mas se a lista tiver apenas um elemento, no caso da 3, vc nao precisa comparar nada. Do mesmo modo se vc tiver elementos iguais na lista. Se sao iguais, qq um serve.
Veja a diferença:
Todos os elementos (dieferentes) com o mesmo hashcode:
[0] -> [L0]-> [L0]-> [L0]-> [L0]-> [L0]-> [L0]
Uma posição do vetor aponta pra uma lista gigante. Vc perderá muito tempo comparando
os elementos na lista.
Todo elemento diferente tem hashcode diferente:
[0]->[L0]
[1]->[L1]
[2]->[L2]
[3]->[L3]
[4]->[L4]
Vc tem um vetor grande, mas apontando pra uma lista com um elemento só. Entao vc soh precisa achar o indice do vetor correspondente.
Só pra finalizar: fazer uma busca num vetor é extremamente rapido (ele foi feito pra isso), ao passo q fazer comparações em listas é bem demorado.
Bom, nao sei se deu pra responder.