E você está. O método hashCode() te retorna um int, portanto você está tentando remover da lista o objeto que está na posição desse hashCode. Uma opção seria mandar remover o objeto:listaNaoLocalizados.remove(profissional);
List<Pessoa> pessoas = new ArrayList<Pessoa>();
Pessoa mae = new Pessoa("Maria");
Pessoa pai = new Pessoa("Joao");
pessoas.add(mae);
pessoas.add(pai);
System.out.println("Nome: " + pessoas.get[2].getNome();
entende o que ocorre? Estou acessando indice não existente. Essa exceção ocorre quando tentamos acessar um objeto dentro de uma lista, mas a posicao desse objeto que estamos tentando acessar é maior do que o tamanho da lista toda.
E outra, vc terá outra exceção aí…você não pode manipular uma lista(remover objeto) que você está iterando.
Geralmente em listas, em metodos de busca e remoção, a lista usa o mecanismo de hasCode e equals para determinar a identidade de um certo objeto.
Suponhamos que temos a classe pessoa:
class Pessoa
{
String nome;
int id;
@Override
public boolean equals(Object outraPessoa)
{
if(outraPessoa instanceof Pessoa)
{
//Testa se os nome são iguais
if(this.nome.equals( ((Pessoa)outraPessoa).nome)){
return true;
}
}
return false;
}
@Override
public int hashCode()
{
//retorna o id ou usa-se algum algoritmo para estabelecer o hasCode
return id;
}
}
No metodo equals, verificamos se o objeto recebido é do Tipo Pessoa, assim fazemos a conversão e comparamos seus nomes. Porém, podemos ter em uma lista, duas pessoas com o mesmo nome e isso seria um problema. Para evitar isso, é usado o metodo hashCode que deve retornar sempre o mesmo codigo para o mesmo objeto e ele nunca pode repetir para instancias diferentes.
Então se eu implementar o equals comparando pelo nome e retornar o id no hashCode, no momento que eu utilizar o equals, ele vai saber automaticamente que duas instancias com nomes diferentes não são o mesmo objeto?
Ou eu terei que usar sempre o hashCode para fazer a busca?