Questão de Simulado

6 respostas
joaoorso

Boa tarde pessoal…
Alguém pode por favor me ajudar a entender por que o código abaixo lança uma

Exception in thread "main" java.lang.ClassCastException: test cannot be cast to java.lang.Comparable
	at java.util.TreeMap.put(Unknown Source)
	at java.util.TreeSet.add(Unknown Source)
	at test.main(test.java:10)
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:820]
import java.util.*;


public class test implements Comparator<test> {
	int testNumber;
	
	public static void main(String[] args) {
		Set<test> s1 = new TreeSet<test>();
		s1.add(new test());
		s1.add(new test());
	}

	@Override
	public int compare(test t1, test t2) {
		return t1.testNumber-t2.testNumber;
	}
	

}

Obrigado :smiley:

6 Respostas

w1l14n

Interface set não permitem duplicatas.

Neste caso vc está trabalhando apenas com uma instância de objeto.

Ele retorna false no segundo add, pq o objeto inserido é igual ao anterior.

D

Um TreeMap precisa implementar Comparable, que é diferente do que está sendo implementado, que no caso é Comparator. Quando você tenta adicionar o segundo e ele vai comparar, dá erro pois não consegue fazer o cast.

joaoorso

Mas para que o TreeSet possa considerar os dois objetos iguais não é necessário ter implementado o equals() e o hashCode() ?

D

O TreeSet vai verificar se o objeto é maior menor ou igual ao objeto que está sendo adicionado. E para isso ele precisa que o objeto realize a interface Comparable.

joaoorso

Acho que entendi . Então para fazer o proposto a interface a ser implementada é Comparable e não Comparetor … Certo ?

D

Exatamente.

Criado 22 de junho de 2009
Ultima resposta 26 de jun. de 2009
Respostas 6
Participantes 3