Você está aqui: Java ::: Pacote java.util ::: ArrayList |
Java Avançado - Como ordenar uma ArrayList em ordem crescente de elementos repetidosQuantidade de visualizações: 2575 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] |
![]() |
Java ::: Tratamento de Erros ::: Erros de Tempo de Execução |
Java para iniciantes - Como tratar o erro OutOfMemoryError no JavaQuantidade de visualizações: 11989 vezes |
O erro OutOfMemoryError é apresentado quando a Java Virtual Machine (JVM) não consegue alocar um objeto por falta de memória e o Garbagge Collector não liberou mais memória ainda. Este é um erro que não deve ser apanhado em um bloco try...catch, ou seja, se não há memória para alocar novos objetos, é fácil entender que não haverá memória para tal procedimento. O melhor a fazer é deixar o programa terminar e verificar a causa do problema. Veja a posição da classe OutOfMemoryError na hierarquia de classes da plataforma Java: java.lang.Object java.lang.Throwable java.lang.Error java.lang.VirtualMachineError java.lang.OutOfMemoryError Esta classe implementa a interface Serializable. Uma das causas mais comuns para o erro OutOfMemoryError é a instanciação exagerada de objetos, principalmente em laços (loops). Uma forma de aumentar a memória RAM a ser usada é definindo opções na linha de comando para o java.exe. Algumas destas opções são -Xss64k -Xoss300k -Xms4m e -Xmx10m. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços |
Exercícios Resolvidos de Java - Um laço for que pede que o usuário informe 10 valores inteiros e mostra a quantidade de valores pares informadosQuantidade de visualizações: 10664 vezes |
Pergunta/Tarefa: Escreva um programa Java console que usa o laço for para solicitar que o usuário digite 10 valores inteiros. Em seguida seu programa deverá contar quantos valores pares foram informados. Dica: Use um objeto da classe Scanner para obter a entrada do usuário. Resposta/Solução: A resolução deste exercício envolve a criação de uma variável contador, do tipo int, e que deverá ser inicializada com o valor 0. Veja: int contador = 0; // guardará a quantidade de valores pares lidos ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public static void main(String[] args){ // para este exercício você deverá importar a classe // Scanner. Ela está no pacote java.util.*; // vamos construir um objeto da classe Scanner para ler a // entrada do usuário Scanner entrada = new Scanner(System.in); int valor; // guarda o valor lido int contador = 0; // guardará a quantidade de valores pares lidos // vamos pedir ao usuário que informe 10 valores inteiros for(int i = 0; i < 10; i++){ System.out.print("Informe o " + (i + 1) + "º valor: "); valor = Integer.parseInt(entrada.nextLine()); // vamos verificar se o valor lido é par if(valor % 2 == 0){ contador++; } } // vamos exibir a quantidade de números pares lidos System.out.println("\nVocê informou " + contador + " valores pares.\n"); } |
Java ::: Classes e Componentes ::: JTextArea |
Java Swing - Como obter o texto selecionado em um controle JTextArea do Java SwingQuantidade de visualizações: 8819 vezes |
Em algumas situações nós precisamos obter o texto selecionado pelo usuário em um componente JTextArea de nossas aplicações Java Swing. Isso pode ser feito com uma chamada ao seu método getSelectedText(). Veja um trecho de código no qual obtemos o texto selecionado em um JTextArea chamado textArea: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- textArea = new JTextArea(10, 20); String selecionado = textArea.getSelectedText(); |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |