Olá Vitor, tudo bem com você? Espero que sim...
Bom, vamos abstrair sua dúvida em 3 partes:
A referencia turini não foi utilizada no método javaColecoes.matricula(turini), se tivesse sido utilizada ia dá true o que para mim está correto
E de fato você esta certo, se tivesse sido usado a mesma referência ele teria retornado true
, uma vez que eles apontam para o mesmo objeto, entretanto o professor queria mostrar a diferença entre ser igual e ser mesmo o objeto.
Por que ao alterarmos para List o atributo aluno o resultado vai da true?
Isso acontece porque internamente, ou seja, "por debaixo dos panos", a classe List
utiliza apenas o método equals
para comparar dois objetos. E na vida real é mais complicado, já parou para pensar quantos Vítor Bruno Toscano Ferreira
existem no Brasil? Eu já, rsrsrs são 17, e Lucas da Silva Ferreira
são mais de 3.476.
Fonte: https://portaldatransparencia.gov.br/pessoa-fisica/busca/lista
É claro que isso é apenas um valor aproximado, podem haver mais ou menos, o ponto que eu quero mostrar é, que devemos entender como funciona para sabermos como aplicar.
Para que eu vou usar o hashCode nesse caso, se vai "arrumar" uma coisa que já está certa?
Nesse caso, não faria muita diferença, mas imagine que a Receita Federal precise realizar uma comparação, ou uma busca no banco de dados que contém todos os CPFs do Brasil, seria muito, muito, muito, mas muito ineficiente, eu já falei muito? muito mesmo ineficiente se ela aplicasse essa pesquisa com o método equals
dentro de uma lista.
Entretanto se nesse mesmo cenário fosse utilizado um set
e a busca fosse feita com a implementação do hashCode
, o tempo seria absurdamente menor.
Eis que podemos provar isso com o código abaixo:
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
public class TestaPerformaceAdicaoEBusca {
public static void main(String[] args) {
// Collection<Integer> numerosArrayList = new HashSet<>();
Collection<Integer> numerosArrayList = new ArrayList<>();
long tempoInicial = System.currentTimeMillis();
for (int i = 0; i < 180000; i++) {
numerosArrayList.add(i);
}
for (Integer numero : numerosArrayList) {
numerosArrayList.contains(numero);
}
long tempoFinal = System.currentTimeMillis();
System.out.println("Tempo gasto para para inserir elementos na ArrayList: " + (tempoFinal-tempoInicial) + "ms");
}
}
Faz o teste e depois me fala o que achou. Basta trocar as linhas comentadas.
Espero ter ajudado a esclarecer sua dúvida. Se tiver mais alguma questão, é só perguntar!
Uma ótima semana e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado . Bons Estudos