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.
A primeira opção eu estou usando uma classe TreeSet:
Eis o código:
public class Principal {
public static void main(String[] args) {
Set conjunto = new TreeSet();
conjunto.add("item 1");
conjunto.add("item 2");
conjunto.add("item 3");
conjunto.add("item 3");
Iterator i = conjunto.iterator();
while (i.hasNext()) {
Object elemento = i.next();
String palavra = (String) elemento;
System.out.println(palavra);
}
}
}
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??
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).
Thingol, eu executei o código aqui sem implementa a interface Comparable, e nem usar o comparator, e o código executou sem problema.
public class Conta {
private int numero;
private double saldo;
public void setSaldo(double saldo) {
if (saldo < 0)
throw new IllegalArgumentException();
else
this.saldo = saldo;
}
public double getSaldo() {
return this.saldo;
}
public void setNumero(int numero) {
if (numero < 0)
throw new IllegalArgumentException();
else
this.numero = numero;
}
public int getNumero() {
return this.numero;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Conta criado com saldo de: " + this.saldo ;
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Principal {
public static void main(String[] args) {
Set<Conta> vetContas = new TreeSet<Conta>();
Conta c = new Conta();
c.setSaldo(100);
vetContas.add(c);
Iterator<Conta> i = vetContas.iterator();
while (i.hasNext()) {
Conta outraConta = i.next();
System.out.println(outraConta);
}
}
}
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?