Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Deque | Estruturas de Dados Adicionais
Estruturas de Dados em Java

bookDeque

Fila de duas pontas

Este capítulo não será muito longo; ele irá expandir o anterior. Deque, ou fila de duas pontas, ajuda a trabalhar com filas tanto pela frente quanto por trás.

A interface Deque estende a interface Queue, então uma classe como LinkedList também implementa esta interface (estou impressionado com a versatilidade do LinkedList). Portanto, usaremos novamente o LinkedList, mas desta vez com uma nova interface.

Declarando um objeto com o tipo Deque não é diferente de Queue:

main.java

main.java

copy
1
Deque<T> deque = new LinkedList<>();

A principal diferença surge quando passamos para os métodos desta interface. Como um Deque é uma fila de duas pontas, o que significa que você pode trabalhar com elementos tanto na frente quanto no final da fila, seus métodos são adaptados a essa característica.

Métodos

Alguns métodos chave da interface Deque são:

  • addFirst(element): Adiciona um elemento ao início do deque.
  • addLast(element): Adiciona um elemento ao fim do deque.

Evidentemente, em um deque, haveria métodos para adicionar tanto no começo quanto no fim. Os nomes desses métodos são autoexplicativos.

Vamos dar uma olhada nesses métodos em código:

main.java

main.java

copy
123456789101112131415
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }

Como você pode ver, após utilizar o método addFirst(), o elemento foi adicionado ao início do deque. Isso o diferencia do método addLast().

O Deque também possui um método regular add(), que funciona da mesma forma que o método addLast(). Portanto, escolher qual método utilizar fica a seu critério.

Vamos em frente!

Métodos de Remoção

Se existem métodos para adicionar elementos ao início e ao fim, também devem existir métodos para remover do início e do fim da deque.

  • removeFirst(): Remove e retorna o elemento do início da deque.
  • removeLast(): Remove e retorna o elemento do fim da deque.

Os métodos addFirst() e addLast() realizam a remoção de elementos do início e do fim da deque. Vamos dar uma olhada em um exemplo de uso no código:

main.java

main.java

copy
1234567891011121314151617
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }

Como você pode ver, removemos o primeiro e o último elemento do deque, deixando apenas o segundo elemento. É simples e prático, e os nomes dos métodos são autoexplicativos.

Nota

Para garantir que seu programa e métodos sejam igualmente compreensíveis, vale a pena dar a eles nomes claros. O nome de uma variável/método/classe deve indicar o que aquele método faz. Tente evitar nomes como "a," "var1/var2," e assim por diante. Com essa abordagem na escrita do código, será muito mais fácil para você trabalhar com seus próprios métodos.

Métodos de recuperação

A seguir, vamos aos métodos de recuperação de elementos do deque.

  • getFirst(): Retorna, mas não remove, o elemento do início do deque.
  • getLast(): Retorna, mas não remove, o elemento do final do deque.

Podemos acessar os primeiros e últimos elementos em tal fila de duas extremidades. Vamos ver tradicionalmente a implementação no código:

main.java

main.java

copy
123456789101112131415161718
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }

Usando os métodos getFirst() e getLast(), recuperamos os primeiros e últimos elementos do deque e atribuímos a variáveis recém-criadas.

Na interface Deque, também existem os métodos peekFirst() e peekLast(), que abordam a questão do lançamento de exceção. Ao invés de lançarem uma exceção e interromperem o programa, eles retornam null se a fila estiver vazia. Vamos ver um exemplo:

main.java

main.java

copy
123456789101112131415
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }

Neste exemplo, tornou-se evidente que é muito melhor utilizar os métodos peekFirst() e peekLast() ao invés de usar os métodos getFirst() e getLast(), pois eles não interromperão o programa em caso de erro.

No entanto, não se esqueça do NullPointerException! Esta exceção pode causar muitos problemas no seu programa.

Existem também métodos alternativos equivalentes para os métodos addFirst(), addLast(), removeFirst() e removeLast(). Não vamos nos aprofundar neles por muito tempo, já que você já entende o princípio de como esses métodos funcionam, mas aqui está a lista:

Métodos alternativos

Métodos para adicionar um elemento ao início da fila dupla:

  • offerFirst(E e): Adiciona um elemento ao início da fila dupla, se possível, e retorna true. Retorna false se a adição não for possível.
  • offerLast(E e): Adiciona um elemento ao fim da fila dupla, se possível, e retorna true. Retorna false se a adição não for possível.
  • push(E e): Adiciona um elemento ao início da fila dupla, similar a addFirst(). Note que push() também é um método de pilha na classe Deque.

Métodos para remover um elemento do início da fila dupla:

  • pollFirst(): Remove e retorna o primeiro elemento da fila dupla. Retorna null se a fila dupla estiver vazia.
  • pollLast(): Remove e retorna o último elemento da fila dupla. Retorna null se a fila dupla estiver vazia.
  • pop(): Remove e retorna o primeiro elemento da fila dupla, similar a removeFirst().

Cobrimos os métodos principais. Se você vai usar Queue ou Deque fica inteiramente a seu critério.

A escolha depende dos requisitos do programa. Você sempre pode resolver tudo com um array regular, mas seria bastante desafiador, e eu não acho que seria otimizado. É por isso que tantas estruturas de dados diferentes são criadas exclusivamente pela conveniência de escrever vários programas.

No próximo capítulo, vamos colocar filas em prática, e você verá quão convenientes elas são para trabalhar no contexto certo.

1. Pergunta: O que significa "Deque"?

2. Qual interface em Java representa uma Deque?

3. Qual é o propósito do método addFirst() em uma Deque?

4. Qual método é usado para recuperar, mas não remover, o último elemento de um Deque?

question mark

Pergunta: O que significa "Deque"?

Select the correct answer

question mark

Qual interface em Java representa uma Deque?

Select the correct answer

question mark

Qual é o propósito do método addFirst() em uma Deque?

Select the correct answer

question mark

Qual método é usado para recuperar, mas não remover, o último elemento de um Deque?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 4

bookDeque

Deslize para mostrar o menu

Fila de duas pontas

Este capítulo não será muito longo; ele irá expandir o anterior. Deque, ou fila de duas pontas, ajuda a trabalhar com filas tanto pela frente quanto por trás.

A interface Deque estende a interface Queue, então uma classe como LinkedList também implementa esta interface (estou impressionado com a versatilidade do LinkedList). Portanto, usaremos novamente o LinkedList, mas desta vez com uma nova interface.

Declarando um objeto com o tipo Deque não é diferente de Queue:

main.java

main.java

copy
1
Deque<T> deque = new LinkedList<>();

A principal diferença surge quando passamos para os métodos desta interface. Como um Deque é uma fila de duas pontas, o que significa que você pode trabalhar com elementos tanto na frente quanto no final da fila, seus métodos são adaptados a essa característica.

Métodos

Alguns métodos chave da interface Deque são:

  • addFirst(element): Adiciona um elemento ao início do deque.
  • addLast(element): Adiciona um elemento ao fim do deque.

Evidentemente, em um deque, haveria métodos para adicionar tanto no começo quanto no fim. Os nomes desses métodos são autoexplicativos.

Vamos dar uma olhada nesses métodos em código:

main.java

main.java

copy
123456789101112131415
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }

Como você pode ver, após utilizar o método addFirst(), o elemento foi adicionado ao início do deque. Isso o diferencia do método addLast().

O Deque também possui um método regular add(), que funciona da mesma forma que o método addLast(). Portanto, escolher qual método utilizar fica a seu critério.

Vamos em frente!

Métodos de Remoção

Se existem métodos para adicionar elementos ao início e ao fim, também devem existir métodos para remover do início e do fim da deque.

  • removeFirst(): Remove e retorna o elemento do início da deque.
  • removeLast(): Remove e retorna o elemento do fim da deque.

Os métodos addFirst() e addLast() realizam a remoção de elementos do início e do fim da deque. Vamos dar uma olhada em um exemplo de uso no código:

main.java

main.java

copy
1234567891011121314151617
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }

Como você pode ver, removemos o primeiro e o último elemento do deque, deixando apenas o segundo elemento. É simples e prático, e os nomes dos métodos são autoexplicativos.

Nota

Para garantir que seu programa e métodos sejam igualmente compreensíveis, vale a pena dar a eles nomes claros. O nome de uma variável/método/classe deve indicar o que aquele método faz. Tente evitar nomes como "a," "var1/var2," e assim por diante. Com essa abordagem na escrita do código, será muito mais fácil para você trabalhar com seus próprios métodos.

Métodos de recuperação

A seguir, vamos aos métodos de recuperação de elementos do deque.

  • getFirst(): Retorna, mas não remove, o elemento do início do deque.
  • getLast(): Retorna, mas não remove, o elemento do final do deque.

Podemos acessar os primeiros e últimos elementos em tal fila de duas extremidades. Vamos ver tradicionalmente a implementação no código:

main.java

main.java

copy
123456789101112131415161718
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }

Usando os métodos getFirst() e getLast(), recuperamos os primeiros e últimos elementos do deque e atribuímos a variáveis recém-criadas.

Na interface Deque, também existem os métodos peekFirst() e peekLast(), que abordam a questão do lançamento de exceção. Ao invés de lançarem uma exceção e interromperem o programa, eles retornam null se a fila estiver vazia. Vamos ver um exemplo:

main.java

main.java

copy
123456789101112131415
package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }

Neste exemplo, tornou-se evidente que é muito melhor utilizar os métodos peekFirst() e peekLast() ao invés de usar os métodos getFirst() e getLast(), pois eles não interromperão o programa em caso de erro.

No entanto, não se esqueça do NullPointerException! Esta exceção pode causar muitos problemas no seu programa.

Existem também métodos alternativos equivalentes para os métodos addFirst(), addLast(), removeFirst() e removeLast(). Não vamos nos aprofundar neles por muito tempo, já que você já entende o princípio de como esses métodos funcionam, mas aqui está a lista:

Métodos alternativos

Métodos para adicionar um elemento ao início da fila dupla:

  • offerFirst(E e): Adiciona um elemento ao início da fila dupla, se possível, e retorna true. Retorna false se a adição não for possível.
  • offerLast(E e): Adiciona um elemento ao fim da fila dupla, se possível, e retorna true. Retorna false se a adição não for possível.
  • push(E e): Adiciona um elemento ao início da fila dupla, similar a addFirst(). Note que push() também é um método de pilha na classe Deque.

Métodos para remover um elemento do início da fila dupla:

  • pollFirst(): Remove e retorna o primeiro elemento da fila dupla. Retorna null se a fila dupla estiver vazia.
  • pollLast(): Remove e retorna o último elemento da fila dupla. Retorna null se a fila dupla estiver vazia.
  • pop(): Remove e retorna o primeiro elemento da fila dupla, similar a removeFirst().

Cobrimos os métodos principais. Se você vai usar Queue ou Deque fica inteiramente a seu critério.

A escolha depende dos requisitos do programa. Você sempre pode resolver tudo com um array regular, mas seria bastante desafiador, e eu não acho que seria otimizado. É por isso que tantas estruturas de dados diferentes são criadas exclusivamente pela conveniência de escrever vários programas.

No próximo capítulo, vamos colocar filas em prática, e você verá quão convenientes elas são para trabalhar no contexto certo.

1. Pergunta: O que significa "Deque"?

2. Qual interface em Java representa uma Deque?

3. Qual é o propósito do método addFirst() em uma Deque?

4. Qual método é usado para recuperar, mas não remover, o último elemento de um Deque?

question mark

Pergunta: O que significa "Deque"?

Select the correct answer

question mark

Qual interface em Java representa uma Deque?

Select the correct answer

question mark

Qual é o propósito do método addFirst() em uma Deque?

Select the correct answer

question mark

Qual método é usado para recuperar, mas não remover, o último elemento de um Deque?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2
some-alt