[SCJP] HashSet e remove()

4 respostas
C

Para quem está estudando para exame SCJP ou gosta de resolver o problema...qual é a saida dos codigos abaixo? :

class KeyMaster {
	public int i;
	public KeyMaster(int i) { this.i = i; }
	public boolean equals(Object o) { return i == ((KeyMaster)o).i; }
	public int hashCode() { return i; }
}

public class Questao147 {

	public static void main(String[] args) {
		Set<KeyMaster> set = new HashSet<KeyMaster>();
		KeyMaster k1 = new KeyMaster(1);
		KeyMaster k2 = new KeyMaster(2);
		set.add(k1); set.add(k1);
		set.add(k2); set.add(k2);
		
		System.out.println(set.size() + ":");
		k2.i = 1;
		
		System.out.println(set.size() + ":");
		set.remove(k1);
		
		System.out.println(set.size() + ":");
		set.remove(k2);
		
		System.out.println(set.size());		
	}
}

4 Respostas

J

2:
2:
1:
1

robson_costa

javadev:
2:
2:
1:
1

blz, mas pq na segunda chamada ao metodo remove(k2) ele nao conseguiu remover o elemento?

C

blz, mas pq na segunda chamada ao metodo remove(k2) ele nao conseguiu remover o elemento?[/quote]

A instrução (k2.i = 1) modificou o valor primitivo variavel “i”. Quando set.remove(k2) for executar, ele ignora porque ele achou que ja deletou o k# cujo i = 1;

Se a linha (k2.i = 1) nao for executada, a saida seria : 2:2:1:0

robson_costa

entao o set guarda tipo um historico de suas operações? pra por exemplo melhorar o desempenho ?

Criado 22 de março de 2008
Ultima resposta 1 de abr. de 2008
Respostas 4
Participantes 3