Arraylist.remove - alguém pode me ajudar?

2 respostas Resolvido
javaarraylist
A

eu gostaria de saber se o arraylist.remove apenas remove as referências do endereço da memoria onde o objeto está ou se ele apaga o objeto da memória. veja esse caso:

public Object getRandom() {
	
	int random = (int) Math.floor(Math.random() * ação.size()); //ação é um ArrayList<object>
	
	Object saida = ação.get(random);
	ação.remove(random);
	return saida;
	

}

eu quero saber se neste caso o object saida mantem o endereço de memória onde o objeto está ou se o ação.remove() apagou o objeto.

2 Respostas

rodrigo.uchoa
Solucao aceita

Oi Andre!

O ArrayList aponta para o objeto, contem uma referencia para ele. Quando voce remove o objeto do ArrayList ele apenas deixa de ser referenciado la. No seu código você antes de remover o objeto do ArrayList guardou sua referencia na variavel saida. Entao voce tinha duas referencias ao objeto, depois ficou so com uma.

Remover o objeto propriamente dito da memoria será feito em algum momento pelo garbage collector quando ele não for mais referenciado (não é o seu caso já que você aponta pra ele na variavel “saida”).

Lembrando que mesmo se você não tivesse feito um “acao.get(random)” e não tivesse mais nenhuma referencia pra ele, não temos como garantir quando ele será de fato removido pelo garbage collector. Mas pra todos os fins e efeitos, ele iria “sumir do seu alcance” já que não ia poder mais ser referenciado.

Pra concluir, não é uma boa prática criar variáveis com acentos como a variável “ação” que você usou ai. Ou usa “acao” ou então em ingles, “action”.

Abs.

A

valeu

Criado 15 de janeiro de 2017
Ultima resposta 15 de jan. de 2017
Respostas 2
Participantes 2