Você está aqui: Java ::: Pacote java.util ::: ArrayList

Java Avançado - Como ordenar uma ArrayList em ordem crescente de elementos repetidos

Quantidade 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]

Link para compartilhar na Internet ou com seus amigos:

Java ::: Tratamento de Erros ::: Erros de Tempo de Execução

Java para iniciantes - Como tratar o erro OutOfMemoryError no Java

Quantidade 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 informados

Quantidade 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
Veja a resolução completa para o exercício, comentada linha a linha:

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

Quantidade 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

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
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
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 66 usuários muito felizes estudando em nosso site.