Dúvida - Questão Comparable

3 respostas
Gustavo_Santos

Boa noite pessoal,

Estou com dúvida nessa questão:

public class Drink implements Comparable {
	public String name;

	public int compareTo(Object o) {
		return 0;
	}

	public static void main(String[] args) {

		Drink one = new Drink();
		Drink two = new Drink();
		one.name = "Coffee";
		two.name = "Tea";
		
	
		TreeSet set = new TreeSet();
		set.add(one);
		set.add(two);
		
		Iterator it = set.iterator();
		
		while(it.hasNext()) {
			System.out.println((Drink)it.next());
		}
	}
	
	public String toString() {
		return this.name;
	};

}

O método sort() usa compareTo() para determinar como o conjunto deve ser classificado. Como
é um TreeSet, ele não permite duplicatas e é classificado. Contudo, não entendi o porque de não ter
adicionado o segundo objeto (two).

Quando retorno 0 no meu compareTo ele só add um objeto. Porque ?
E quando coloco para retornar -1,

public int compareTo(Object o) {
		return -1;
	}

Tenho a saída: TeaTeaTeaCoffee, porque ?!

Com 1 positivo:

public int compareTo(Object o) {
		return 1;
	}

A saída é - CoffeeTeaTeaTea

Pessoal, não estou entendendo qual o critério que ele usa para classificar

negativo - objeto < objeto2
0 - objeto == objeto2
positivo - objeto > objeto2

Grato a quem ajudar !

3 Respostas

D

A resposta está na sua própria pergunta. Veja, como vc disse TreeSet não permite elementos duplicados. Rotornar 0 no compareTo indica que os elementos comparados são iguais. Logo, quando vc coloca pra retornar 0 no compareTo o segundo elemento não é adicionado porque ele é “igual” ao primeiro.

Quando vc colocar pra retornar 1 no compareTo, no momento da execução da linha set.add(two); ele vai comparar o “Tea” com o “Coffee”. Como retorna 1, considera-se que “Tea” é maior do que Coffee. E quando retorna -1 é ele considera que Tea é menor do que Coffee. Isso explica a ordem em que eles aparecem na iteração.

evertonsilvagomesjav

Fala Irmao!!

Quando vc usa Comparable e faz com que o retorno do compareTo seja 0, vc esta dizendo que os dois objetos sao iguais, por isso ele nao adiciona os dois, como TreeSet e classificado ele usa o compareTo para fazer essa verificação.

No mais é isso mesmo que vc falou:

return negativo “this” é menor que object 2.
return positivo “this” é maior que object 2.
return 0 igual vc fez objetos iguais.

Gustavo_Santos

Fala Everton meu véio ^^

blz, a dúvida era essa mesmo… Só para confirmar !!!

Vlw aii galera !!!

Criado 3 de setembro de 2010
Ultima resposta 4 de set. de 2010
Respostas 3
Participantes 3