Praticando o uso de NavigableSet, SortedSet e TreeSet

Alguém consegue me explicar o porquê das saídas -> three two

??? :shock: :?: :?: :?:

Testei com o NavigableSet e com o SortedSet…

[code]public static void main(String[] args) {

	TreeSet<String> mts = new TreeSet<String>();
	
	mts.add("one");
	mts.add("two");
	mts.add("three");
	mts.add("four");
	mts.add("five");

	//SortedSet<String> tas = mts.tailSet("three");
	NavigableSet<String> tas = mts.tailSet("three", true);	
	for (String st : tas){
		System.out.print(st+" ");
	}[/code]

Pirmeiro: O TreeSet coloca os objetos usando alguma ordenação natural, ou de algum comparator que tu fornece na hora de instanciar.
Como no caso tu não forneceu qualquer Comparator, ele vai utilizar a ordenação natural de Strings, por ordem alfabetica, resultando no seu conjunto em “five”,“four”,“one”,“three”,“two”.
Segundo: O método tailSet(Object, boolean), retorna um NavigableSet que vai do objeto que tu forneceu até o final do TreeSet ordenado, incluindo ou não (pelo boolean) o objeto.
Ficou claro?

Quando usar NavigableSet? Comparando com SortedSet ou TreeSet…

SortedSet só deixa andar para frente. NavigableSet permite andar para trás também.