Você está aqui: Java ::: Pacote java.util ::: ArrayList |
Java Avançado - Como ordenar uma ArrayList em ordem crescente de elementos repetidosQuantidade de visualizações: 2798 vezes |
|
Em algumas situações nós gostaríamos de ordenar uma List (uma ArrayList, por exemplo) em ordem crescente ou decrescente baseado no número de vezes que um determinado elemento se repete. Este é um exercício interessante, pois mostra como podemos combinar a interface List, a classe ArrayList, a interface Map, a classe HashMap e ainda o método sort() da classe Collections. Nosso objetivo é ordenar um vetor de inteiros contendo alguns elementos repetidos, de forma que o resultado final seja algo como: 2, 3, 4, 6, 50, 9, 9, 7, 7, 7 Veja o código completo para o exemplo. Note como pedimos para o usuário informar 10 valores inteiros e depois os ordenamos por ordem crescente de quantidade de repetições dos elementos (elementos com menos repetições vêm primeiro): ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package arquivodecodigos;
import java.util.*;
public class Estudos{
public static void main(final String[] args) {
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// uma list de inteiros
List<Integer> valores = new ArrayList();
// vamos pedir para o usuário informar 10 valores inteiros
for(int i = 0; i < 10; i++){
System.out.print("Informe um valor inteiro: ");
// vamos adicionar este valor à lista
valores.add(Integer.parseInt(entrada.nextLine()));
}
// agora criamos um Map para contar as repetições
Map<Integer, Integer> quants = new HashMap();
// e percorremos todos os elementos da segunda lista
for(Integer item : valores){
Integer quant = quants.get(item);
// este valor está no mapa?
if(quant == null) {
quant = 1;
}
else {
quant++;
}
// colocamos ou ajustamos este item no mapa
quants.put(item, quant);
}
Collections.sort(valores, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
// lógica para ordenar pela quantidade de repetições
int res = quants.get(a) - quants.get(b);
// ou pelo valor dos elementos
if(res == 0){
res = a - b;
}
return res;
}
});
// mostra o vetor já ordenado
System.out.println(valores);
}
}
Ao executarmos este código Java nós teremos o seguinte resultado: Informe um valor inteiro: 9 Informe um valor inteiro: 9 Informe um valor inteiro: 4 Informe um valor inteiro: 2 Informe um valor inteiro: 50 Informe um valor inteiro: 7 Informe um valor inteiro: 3 Informe um valor inteiro: 7 Informe um valor inteiro: 7 Informe um valor inteiro: 6 [2, 3, 4, 6, 50, 9, 9, 7, 7, 7] |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





