Você está aqui: Java ::: Estruturas de Dados ::: Filas

Como criar uma fila em Java usando um vetor de ints - Estruturas de Dados em Java

Quantidade de visualizações: 2286 vezes
A Fila é uma estrutura de dados do tipo FIFO - First-In, First-Out (Primeiro a entrar, primeiro a sair). Neste tipo de estrutura, o primeiro elemento a ser inserido é o primeiro a ser removido. Funciona exatamente igual a fila de um banco, fila para comprar ingressos, fila para pagar no caixa da lanchonete, etc.

Veja a imagem a seguir:



Embora seja mais comum a criação de uma estrutura de dados do tipo Fila de forma dinâmica (usando ponteiros e referências), nesta dica eu mostrarei como podemos criá-la em Java usando um array, ou seja, um vetor. No exemplo eu usei inteiros, mas você pode modificar para o tipo de dados que você achar mais adequado.

Veja o código completo para uma classe Fila usando um vetor de ints. Veja que o tamanho do vetor é informado no construtor da classe. Note também a lógica empregada na construção dos métodos enfileirar(), desenfileirar() e imprimirFila():

Código para Fila.java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Fila {
  private int elementos[];
  private int inicio; // início da fila
  private int fim; // fim da fila
  private int maximo; // quantidade máxima de elementos na fila

  // construtor da Fila que aceita o tamanho
  public Fila(int tamanho) {
    // constrói o vetor com o tamanho informado
    this.elementos = new int[tamanho];
    this.inicio = 0; // define o início como sendo o primeiro elemento
    this.fim = -1; // fila vazia. Não tem final ainda
    this.maximo = tamanho; // ajusta a quantidade máxima de elementos
  }

  // método que permite enfileirar um novo elemento
  public void enfileirar(int item) {
    // a fila já está cheia
    if (this.fim == (this.maximo - 1)) {
      System.out.println("\nA fila está cheia.\n");
    } // ainda há espaço na fila
    else {
      this.elementos[++this.fim] = item;
    }
  }

  // método que permite desenfileirar e retornar
  // o elemento no início da fila
  public int desenfileirar() {
    // a fila está vazia
    if (this.inicio == (this.fim + 1)) {
      System.out.println("\nA fila está vazia.\n");
      return -1;
    } // retorna o elemento desenfileirado
    else {
      System.out.println("Elemento desenfileirado: "
        + this.elementos[this.inicio]);
      return this.elementos[this.inicio++];
    }
  }

  // exibe os elementos da fila
  public void exibirFila() {
    // a fila está vazia
    if (this.inicio == (this.fim + 1)) {
      System.out.println("\nA fila está vazia.\n");
    } 
    else {
      for (int i = this.inicio; i <= this.fim; i++) {
        System.out.println("Item[" + (i + 1) + "]: "
          + this.elementos[i]);
      }
    }
  }
}

Veja agora o código para a classe principal, ou seja, a classe Principal usada para testar a funcionalidade da nossa fila:

Código para Principal.java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Estudos {

  public static void main(String[] args) {
    // Vamos criar uma nova fila com espaço para 5 elementos
    Fila fila = new Fila(5);

    // vamos inserir 3 elementos na fila
    fila.enfileirar(34);
    fila.enfileirar(27);
    fila.enfileirar(11);

    // vamos imprimir a fila
    System.out.println("\nOs itens na fila são: ");
    fila.exibirFila();

    // vamos desenfileirar dois itens
    System.out.println();
    fila.desenfileirar();
    fila.desenfileirar();

    // vamos imprimir a fila novamente
    System.out.println("\nOs itens na fila são: ");
    fila.exibirFila();
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Os itens na fila são:
Item[1]: 34
Item[2]: 27
Item[3]: 11

Elemento desenfileirado: 34
Elemento desenfileirado: 27

Os itens na fila são:
Item[3]: 11

Link para compartilhar na Internet ou com seus amigos:

Java ::: Dicas & Truques ::: Programação Orientada a Objetos

Como usar o modificador de acesso private em Java - Apostila Java para iniciantes - Programação Orientada a Objetos em Java

Quantidade de visualizações: 10281 vezes
Um método ou variável declarada com o modificador de acesso private (privado) pode ser acessado somente por uma instância da classe que declara o método ou variável. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// Classe Cliente
class Cliente{
  private String nome = "Osmar";
}

// Classe de teste
public class Estudos{
  public static void main(String args[]){
    Cliente cliente = new Cliente();
    System.out.println(cliente.nome);

    System.exit(0);
  }
}

Ao tentarmos compilar este código teremos a seguinte mensagem de erro:

Estudos.java:10: nome has private access in Cliente
  System.out.println(cliente.nome);


O erro já era esperado, pois sabemos que a classe Estudos não tem acesso aos membros privados da classe Cliente. Experimente alterar o modificador private por public e veja o resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public String nome = "Osmar";

É importante observar que, se duas instâncias de uma classe forem criadas, uma terá acesso aos dados privados da outra, ou seja, o modificador private define quais classes (não instâncias) podem acessar determinado recurso.

Além disso, saiba que classes de nível superior (Top-level) não podem ser declaradas como private. Elas podem ser no máximo de acesso de pacote (nenhum modificador). A mesma regra se aplica a interfaces. No entanto, classes e interfaces internas podem ser declaradas com o modificador private.

Para finalizar, lembre-se de que sub-classes não possuem acesso à membros privados da superclasse.


Java ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern

Padrões de projeto para iniciantes - Como usar o padrão de projeto Singleton em suas aplicações Java

Quantidade de visualizações: 11880 vezes
O padrão de projeto Singleton (ou Singleton Pattern) é um dos padrões de projeto mais conhecidos e implementado extensivamente nas linguagens que suportam programação orientada a objetos, tais como Java e C#. Nesta dica eu mostrarei como implementá-lo.

Uma das situações nas quais usamos o padrão Singleton é quando queremos que somente uma instância de uma determinada classe seja criada e que esta esteja disponível para todas as demais classes do sistema. Um exemplo disso é uma classe responsável por registrar logs do sistema, uma classe responsável por obter conexões com o banco de dados, ou ainda uma classe que concentra dados de configuração da aplicação.

Assim, a chave do padrão Singleton é um método estático, geralmente chamado de getInstance(), que retorna uma nova instância da classe se esta ainda não foi instanciada. Se a classe já tiver sido instanciada, o método getInstance() retorna a instância já existente.

Vamos ver um exemplo deste padrão em Java. Observe o código a seguir:

Código para Logger.java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

// Uma classe Singleton responsável por gravar
// logs no sistema
public class Logger {
    // variável estática e privada que guarda a instância
    // atual da classe
    private static Logger instancia = null;

    // Método estático que retorna uma instância já existente, ou
    // cria uma nova instância
    public static Logger getInstance() {
        if (instancia == null) {
            instancia = new Logger();
        }
        return instancia;
    }

    // Construtor privado para evitar que instâncias sejam
    // criadas usando new
    private Logger() {
        // não precisamos fazer nada aqui
    }

    // método usado para registrar logs
    public void registrarLog(String dados) {
        System.out.println("Vou registrar o log: " + dados);
    }
}

Veja agora como podemos chamar o método getInstance(), obter um objeto da classe Logger e "registrar um log":

Código para Main.java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Main {
  public static void main(String[] args) {
    // vamos registrar um novo log usando a classe Singleton
    Logger.getInstance().registrarLog("Novo usuário cadastrado.");
  }
}

Ao executar esta aplicação teremos a seguinte saída:

Vou registrar o log: Novo usuário cadastrado.


Java ::: Dicas & Truques ::: Mouse e Teclado

Java Swing para iniciantes - Como detectar eventos do teclado em uma janela JFrame do Java Swing

Quantidade de visualizações: 13274 vezes
Eventos do teclado podem ser detectados em uma janela JFrame do Java Swing por meio da interface KeyListener. Neste exemplo temos uma JFrame que estende essa interface e fornece implementação para o seu método keyPressed().

Temos também um controle JTextArea desabilitado, o qual usamos para exibir a letra e o código da tecla pressionada.

Veja o resultado na imagem abaixo:



E aqui está o código Java Swing completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Estudos extends JFrame implements KeyListener{
  private JTextArea textArea;  
 
  public Estudos(){
    super("Eventos do Mouse e Teclado");
    Container c = getContentPane();
    FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
    c.setLayout(layout);
    textArea = new JTextArea(100, 150);
    textArea.setEnabled(false);    
    textArea.setDisabledTextColor(Color.BLACK); 
    c.add(textArea);
 
    addKeyListener(this);
 
    setSize(350, 250);
    setVisible(true);
  }
     
  public void keyPressed(KeyEvent e){
    textArea.setText(
      String.format("Tecla: %s - Código Unicode: %d", 
        e.getKeyText(e.getKeyCode()), e.getKeyCode()));
  }
     
  public void keyReleased(KeyEvent e){
    // sem implementação
  }
 
  public void keyTyped(KeyEvent e){
    // sem implementação
  }   
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}



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á 88 usuários muito felizes estudando em nosso site.