Classificando ArrayList<String> simples [Resolvido]

Bom dia pessoal,

simplesmente estou tentando classificar esse ArrayList mais não esta classificando, não sei o porquê. Mas ela não é classificada por ordem natural?
mas nem isso esta ocorrendo

[code]import java.util.*;

public class TesteSort {
public static void main(String[] args) {

	ArrayList<String> nomes = new ArrayList<String>();
	
	nomes.add("Fernando");
	nomes.add("diego");
	nomes.add("Maria");
	nomes.add("joão");
	nomes.add("Tales");
	
	System.out.println("\nsorted: " + nomes);
	
//ArrayList nao pode ser classificado o motivo de ter aceito a classificação é 
//a classe String ja implementa Comparable permitindo assim a classificação dos
//itens da lista
}

}[/code]

Faltou chamar Collections.sort.

[code]
import java.util.*;

public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();

  nomes.add("Fernando");
  nomes.add("diego");
  nomes.add("Maria");
  nomes.add("joão");
  nomes.add("Tales");

  Collections.sort(nomes);	
  System.out.println("\nsorted: " + nomes);

}
}[/code]

Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:

[code]
import java.util.*;

public class TesteSort {
public static void main(String[] args) {
Set<String> nomes = new TreeSet<String>();

  nomes.add("Fernando");
  nomes.add("diego");
  nomes.add("Maria");
  nomes.add("joão");
  nomes.add("Tales");

  System.out.println("\nsorted: " + nomes);

}
}[/code]

Em inglês, você não pode confundir “ordered” com “sorted”.

“Sorted” é “ordenado”, e “ordered” é “arranjado” (também pode ser “ordenado” ou “mandado” ou “encomendado”. Depende do contexto).

Para você ter uma idéia, um ArrayList é “ordered” no sentido em que se você inserir as coisas em uma determinada sequência, elas permanecem na mesma sequência em que entraram, e um HashSet não é “ordered” porque ele não preserva essa sequência quando você vai recuperar os elementos, mas um LinkedHashSet já é “ordered” porque ele preserva a sequência. Um TreeSet é “sorted” porque ele sempre deixa as coisas em ordem alfabética.

I ordered a book - eu encomendei um livro
I sorted the books - eu arrumei (ordenei) os livros

[quote=ViniGodoy]Faltou chamar Collections.sort.

[code]
import java.util.*;

public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();

  nomes.add("Fernando");
  nomes.add("diego");
  nomes.add("Maria");
  nomes.add("joão");
  nomes.add("Tales");

  Collections.sort(nomes);	
  System.out.println("\nsorted: " + nomes);

}
}[/code]

Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:

[code]
import java.util.*;

public class TesteSort {
public static void main(String[] args) {
Set<String> nomes = new TreeSet<String>();

  nomes.add("Fernando");
  nomes.add("diego");
  nomes.add("Maria");
  nomes.add("joão");
  nomes.add("Tales");

  System.out.println("\nsorted: " + nomes);

}
}[/code]
[/quote]

Eu fiz exatamente isso antes, mas nao esta classificando… =/

Cara letras maiusculas e minusculas espaços no inicio tabem influem na ordenação

Ah, entendi o seu problema. É que se você não passar um parâmetro a mais para o TreeSet, ele não vai ordenar de acordo com as regras da língua portuguesa, mas de acordo com o código Unicode de cada caracter. Para fazer do jeito que você espera:

package guj;

import java.text.Collator;
import java.util.Locale;
import java.util.Set;
import java.util.TreeSet;

public class ExemploSort {

    public static void main(String[] args) {
        Set<String> nomesUnicode = new TreeSet<String>();
        nomesUnicode.add("Fernando");
        nomesUnicode.add("diego");
        nomesUnicode.add("Maria");
        nomesUnicode.add("joão");
        nomesUnicode.add("Tales");

        System.out.printf("Ordenação Unicode: %s%n", nomesUnicode);
        Locale ptBr = new Locale ("pt", "BR");
        Set<String> nomesPortugues = new TreeSet<String>(Collator.getInstance(ptBr));
        nomesPortugues.add("Fernando");
        nomesPortugues.add("diego");
        nomesPortugues.add("Maria");
        nomesPortugues.add("joão");
        nomesPortugues.add("Tales");

        System.out.printf("Ordenação em Português: %s%n", nomesPortugues);
    }

}

A execução do programa acima mostra:

Ordenação Unicode: [Fernando, Maria, Tales, diego, joão]
Ordenação em Português: [diego, Fernando, joão, Maria, Tales]

OK?

[quote=entanglement]A execução do programa acima mostra:

Ordenação Unicode: [Fernando, Maria, Tales, diego, joão]
Ordenação em Português: [diego, Fernando, joão, Maria, Tales]

OK?[/quote]

De acordo com o livro da katy o código esta apenas dessa forma e esta sendo classificado.

[code]import java.util.*;

public class TesteSort {
public static void main(String[] args) {
List nomes = new ArrayList();

  nomes.add("Fernando");   
  nomes.add("diego");   
  nomes.add("Maria");   
  nomes.add("joão");   
  nomes.add("Tales");   

  System.out.println("unsorted: " + nomes);   
  Collections.sort(nomes);     
  System.out.println("sorted: " + nomes);   

}
}[/code]

Cara ja to ligado no que ta acontecendo quando vc faz System.out.println(nomes); ele chama o metodo toString e se não me falha a memoria toString de set não garante a ordenação.

Acho que é isso

[quote=vitorfarias]Cara ja to ligado no que ta acontecendo quando vc faz System.out.println(nomes); ele chama o metodo toString e se não me falha a memoria toString de set não garante a ordenação.

Acho que é isso [/quote]

Eu não estou usando um SET mas sim um LIST

Então siga a dica do Entanglement e passe um Collator no sort:

[code]import java.util.*;

public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();

  nomes.add("Fernando");   
  nomes.add("diego");   
  nomes.add("Maria");   
  nomes.add("joão");   
  nomes.add("Tales");   

  System.out.println("unsorted: " + nomes);   
  Collections.sort(nomes, Collator.getInstance());     
  System.out.println("sorted: " + nomes);   

}
}[/code]

Ele que ordena de acordo com o dicionário. Aí “d” maiúsculo fica em ordem com “D” maiúsculo, acentos são agrupados, etc.