Relação entre TreeSet e interface Comparable

Classe que não implementa Comparable e é adicionada em uma TreeSet provoca ClassCastException

 

OK

import java.util.Set;

import java.util.TreeSet;

import java.lang.Comparable;

 
 

public class Teste {

public static void main(String[] args){

Set<Pessoa> s = new TreeSet<Pessoa>();

s.add(new Pessoa(34));

s.add(new Pessoa(5));

s.add(new Pessoa(32));

s.add(new Pessoa(2));

 
 

for(Pessoa p : s)

System.out.println(p);

 
 

}

}

 
 

class Pessoa implements Comparable<Pessoa>{

private int idade;

public Pessoa(int idade){

this.idade = idade;

}

public int compareTo(Pessoa p){

Integer esse = new Integer(this.idade);

Integer outro = new Integer(p.idade);

return esse.compareTo(outro);

}

public String toString(){

return “Pessoa = ” + new Integer(this.idade).toString();

}

}

Output:

Pessoa = 2

Pessoa = 5

Pessoa = 32

Pessoa = 34

 

 

 

Não OK

 

import java.util.Set;

import java.util.TreeSet;

 
 

public class Teste {

public static void main(String[] args){

Set<Pessoa> s = new TreeSet<Pessoa>();

s.add(new Pessoa(34));

s.add(new Pessoa(5));

s.add(new Pessoa(32));

s.add(new Pessoa(2));

 
 

for(Pessoa p : s)

System.out.println(p); 

}

}

 
 

class Pessoa {

private int idade;

public Pessoa(int idade){

this.idade = idade;

}

public String toString(){

return “Pessoa = ” + new Integer(this.idade).toString();

}

}

 
 

javac: OK

Output:

Exception in thread “main” java.lang.ClassCastException: Pessoa cannot be cast to java.lang.Co

mparable

at java.util.TreeMap.put(TreeMap.java:559)

at java.util.TreeSet.add(TreeSet.java:255)

at Teste.main(Teste.java:9)

 
 

Anúncios
Esta entrada foi publicada em Arrays & Colletions com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s