Classificando ArrayList<String> simples [Resolvido]

10 respostas
diegohsi

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

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
	}
}

10 Respostas

ViniGodoy

Faltou chamar Collections.sort.

import java.util.*;

public class TesteSort {
   public static void main(String[] args) {
      List&lt;String&gt; nomes = new ArrayList&lt;String&gt;();
		
      nomes.add("Fernando");
      nomes.add("diego");
      nomes.add("Maria");
      nomes.add("joão");
      nomes.add("Tales");

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

Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:

import java.util.*;

public class TesteSort {
   public static void main(String[] args) {
      Set&lt;String&gt; nomes = new TreeSet&lt;String&gt;();
		
      nomes.add("Fernando");
      nomes.add("diego");
      nomes.add("Maria");
      nomes.add("joão");
      nomes.add("Tales");

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

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

diegohsi
ViniGodoy:
Faltou chamar Collections.sort.
import java.util.*;

public class TesteSort {
   public static void main(String[] args) {
      List&lt;String&gt; nomes = new ArrayList&lt;String&gt;();
		
      nomes.add("Fernando");
      nomes.add("diego");
      nomes.add("Maria");
      nomes.add("joão");
      nomes.add("Tales");

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

Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:

import java.util.*;

public class TesteSort {
   public static void main(String[] args) {
      Set&lt;String&gt; nomes = new TreeSet&lt;String&gt;();
		
      nomes.add("Fernando");
      nomes.add("diego");
      nomes.add("Maria");
      nomes.add("joão");
      nomes.add("Tales");

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

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

V

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

E

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);
    }

}
E

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?

diegohsi
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?

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

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);     
      System.out.println("sorted: " + nomes);   
   }   
}
V

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

diegohsi

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

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

ViniGodoy

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

import java.util.*;   
  
public class TesteSort {   
   public static void main(String[] args) {   
      List&lt;String&gt; nomes = new ArrayList&lt;String&gt;();   
           
      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);   
   }   
}

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.

Criado 12 de novembro de 2010
Ultima resposta 12 de nov. de 2010
Respostas 10
Participantes 4