busca encadeada que trara maior performance nasua busca. Comecareifalando sobre as vantagens de se encadear uma lista no nosso projeto,as observacoes que deverao ser feitas ao se utilizar destafuncionalidade, como implementar de forma valida e eficiente e oscontratos que deverao ser seguidos. Desta forma seu codigo ao destepost podera retornar uma pesquisa com muito mais eficiencia do queanterioremente.Vantagensde uma lista ecadeada Omaior beneficio de uma busca encadeada e que a otimizacao dotempo de uma busca e de processamento que deve diminuir de acordo como numero de registros. Por exemplo, se possuimos uma lista encadeadapara guarda objetos que representem surfistas do campeonato WCT quepossui 1.000 participantes, em media, seus sistema tera quepercorrer 500 posicoes (uma para o melhor caso e mill para o piorcaso) ao tentar buscar um surfista certo? Querendomelhorar nossas buscas em uma aplicacao, criamos um array de 26posicoes, cada um representando uma letra do alfabeto. E em cadaposicao deste array tivesseuma lista encadeada contendo somente surfistascujo nome se inicia com aquela dada letra. Nessaestrutura percebemosque podemosdiminuiro tempode busca, ja que voce dividiu os surfistasem grupos.Beleza!Acabamosde implementar nometodo hashcode otimozandoabusca,apesarde ser um poucoproblematica ainda. Principalmente porque esta desbalanceada. Digoisto porque provavelmente na hash deletra A,estaria concentrado boa parte dos surfistase na hash deletra W,quase nenhum. Percebe isso?Outroproblema da nossahashe que limita a sua estrutura a 26 hashs enquanto o ideal e que onumero de hashs possa crescer de acordo com o volume de dados.Observe que neste exemplo, sua implementacao de hashCode seria aconversao da 1a letra do nome em um valor entre 0 e 25 (26possibilidades de colisao). Esse hashCode serve justamente parasabermos em que hash um objeto (surfista)entraria. Vamosentao melhorarnosso algoritmo do hashCode?Imagine agora um array de 500 posicoes abrigando em suas posicoesas listas encadeadas. Imagine tb que seu hashCode faca a seguinteconta: Pegue cada letra do nome de um surfista, converta no valor ascii e some. Pegue o total e dividiremos por 500 e pegaremos o resto da divisao.Bem,notadamente, numa divisao por 500, so podemos ter resto de 0 ate499. Perceba que e exatamente a variacao de seu array com 500posicoes!!!Logoao armazenarmosnossa lista nestanova estrutura teremos uma media de apenas 2 surfistasporhash! Conseguimos melhorar ocodigoinicial que percorria em media 500 em cada busca para 2! Neste casoo load factor desta estrutura que voce criou e 2 (uma media de 2elementos por hash)Observacoesem um Hashcode Sempreque for sobrescrever o metodo hashCode, devera ter algumas atencoesfaceis de serem lembradas pois sao muito parecidas com as do metodoequals() caso consulte a API do java vera as seguintesobservacoes como contrato de um hashCode. Sempre que for chamado no mesmo objeto mais de uma vez durante a execucao de um aplivativo Java, o metodo hashCode() tera que retornar consistemtemente o mesmo inteiro. Contato que nenhuma informacao usada nas comparacoes equals() envolvendo o objeto tenha sido alterada. Esse inteiro tera que permanecer constante de uma execucao a outra do mesmo aplicativo. Se dois objetos forem iguais de acordo com o metodo equals(Object), entao, a chamada de metodo hashCode() nos dois objetos deve produzir como resultado o mesmo inteiro. Nao e obrigatorio que quando dois objetos