Olá todos no forum estou estudando sobre Collection , e estou tentando implementar uma coleção do tipo TreeSet, que é um conjunto que implementa dentre outras a interface Set.
A questão é a seguinte, na apostila FJ-11 da caelum ela diz que os elementos inseridos em um conjunto do tipo TreeSet quando percorridos são ordenados de acordo com o metodo definido de ordenação, que é a implementação da interface Comparable.
Agora olhando o javadoc da Classe TreeSet, percebi que ele nao implmenta a interface Comparable, então como ele ordena??
Obs:Eu nao passei nenhum Comparator para seu construtor.
Não é a classe TreeSet que tem de implementar Comparable (ela implementa SortedSet); é sua classe, que será inserida em um TreeSet, que tem de implementar Comparable ou então usar um Comparator.
danielbussade
Obrigado thingol, é que estava ficando confuso em relação a isso , tirou uma dúvida e tanto!!
Neste exemplo entao o ordem sera dada pelo metodo implementado da Interface Comparable na classe String,
mas se fosse por exemplo um vetor de Contas //classe criada por mim, e eu nao tiver ainda implementado o metodo compareTo , o ordem a ser impressa será o que eu inseri certo??
Att
T
thingol
Não; vai dar um erro de execução em “add” se você não usar um Comparator ou não implementar Comparable.
(Em particular acho mais fácil e mais flexível usar um Comparator).
danielbussade
Thingol, eu executei o código aqui sem implementa a interface Comparable, e nem usar o comparator, e o código executou sem problema.
publicclassConta{privateintnumero;privatedoublesaldo;publicvoidsetSaldo(doublesaldo){if(saldo<0)thrownewIllegalArgumentException();elsethis.saldo=saldo;}publicdoublegetSaldo(){returnthis.saldo;}publicvoidsetNumero(intnumero){if(numero<0)thrownewIllegalArgumentException();elsethis.numero=numero;}publicintgetNumero(){returnthis.numero;}@OverridepublicStringtoString(){// TODO Auto-generated method stubreturn"Conta criado com saldo de: "+this.saldo;}}importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;importjava.util.TreeSet;publicclassPrincipal{publicstaticvoidmain(String[]args){Set<Conta>vetContas=newTreeSet<Conta>();Contac=newConta();c.setSaldo(100);vetContas.add(c);Iterator<Conta>i=vetContas.iterator();while(i.hasNext()){ContaoutraConta=i.next();System.out.println(outraConta);}}}
Se pudesse me esclarecer melhor, eu agradeceria!!
Att
Marky.Vasconcelos
O Comparable é para a ordenação do Set,
testa criar varias contas e colocar no vetor.
Daí sim você não teria a ordem que você quer.
T
thingol
Cuidado com os testes…
Você experimentou pôr mais de um objeto nesse Set?
No segundo objeto vai dar problemas.
danielbussade
Blz me desculpe. Mas porque que quando coloquei o segundo ele nao conseguiu imprimir, se ele nao tem o metodo de ordenação.
Porque ele nao imprimi na ordem que eu inseri??
Ah pra finalizar, eu posso dizer que a diferença basica, do TreeSet, e do HashSet e que o TreeSet, aceita um parametro do tipo Comparator, para comparar seus elementos, de poder implementar a interface Comparable, e o HashSet, só aceita ordenação através da implementação da interface Comparable, com a reescrita do metodo compareTo?