Руководство Java Deque
1. Deque
Deque - это аббревиатура от"Double Ended Queue" (двойная очередь). Как люди, выстраивающиеся в очередь в супермаркете, обслуживаются только первый и последний человек в очереди. Deque предлагает немного больше гибкости, чем обычная очередь.
public interface Deque<E> extends Queue<E>
Deque - это подинтерфейс of Queue, предоставляющий методы для вставки элемента в начало или конец, а также методы для доступа или удаления его первого или последнего элемента.
Deque также включает в себя методы, которые позволяют ему действовать как stack (стек) (см. Более подробное объяснение в статье).
- Queue
- BlockingDeque
- BlockingQueue
- TransferQueue
- ArrayDeque
- ConcurrentLinkedDeque
- ConcurrentLinkedQueue
- LinkedList
- PriorityQueue
- ArrayBlockingQueue
- DelayQueue
- LinkedBlockingQueue
- LinkedBlockingDeque
- PriorityBlockingQueue
- SynchronousQueue
- LinkedTransferQueue
2. Deque Методы
Methods of Deque
void addFirst(E e);
void addLast(E e);
boolean offerFirst(E e);
boolean offerLast(E e);
E removeFirst();
E removeLast();
E pollFirst();
E pollLast();
E getFirst();
E getLast();
E peekFirst();
E peekLast();
void push(E e);
E pop();
boolean removeFirstOccurrence(Object o);
boolean removeLastOccurrence(Object o);
Iterator<E> descendingIterator();
// Methods inherited from Queue:
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
// Methods inherited from Collection:
boolean addAll(Collection<? extends E> c);
boolean remove(Object o);
boolean contains(Object o);
int size();
Iterator<E> iterator();
...
Список 12 характерных методов of Deque:
Insert | addFirst(E) | offerFirst(E) | addLast(E) | offerLast(E) |
Remove | removeFirst() | pollFirst() | removeLast() | pollLast() |
Examine | getFirst() | peekFirst() | getLast() | peekLast() |
boolean addFirst(E) / boolean offerFirst(E)
boolean addFirst(E) | Вставляет элемент перед Deque. Этот метод вызовет исключение, если емкость Deque заполнена. Метод возвращает true, если вставка прошла успешно. |
boolean offerFirst(E) | Вставляет элемент перед Deque. Если емкость Deque заполнена или вставка не удалась, метод вернет false, в противном случае true. |
Примечание: В зависимости от типа Deque он может ограничивать (или не ограничивать) количество элементов.
boolean addLast(E) / boolean offerLast(E)
boolean addLast(E) | Вставляет элемент в конце Deque. Этот метод создает исключение, если емкость Deque заполнена. Метод возвращает true, если вставка прошла успешно. |
boolean offerLast(E) | Вставляет элемент в конце Deque. Если емкость Deque заполнена или вставка не удалась, метод вернет false, в противном случае true. |
E removeFirst() / E pollFirst()
E removeFirst() | Возвращает первый элемент Deque и удаляет его из Deque. Этот метод создает исключение, если Deque не имеет элементов. |
E pollFirst() | Возвращает первый элемент Deque и удаляет его из Deque. Этот метод вернет null, если Deque не имеет элементов. |
E removeLast() / E pollLast()
E removeLast() | Возвращает последний элемент Deque и удаляет его из Deque. Этот метод создает исключение, если Deque не имеет элементов. |
E pollLast() | Возвращает последний элемент Deque и удаляет его из Deque. Этот метод вернет null, если Deque не имеет элементов. |
E getFirst() / E peekFirst()
E getFirst() | Возвращает первый элемент Deque, но не удаляет его из Deque. Этот метод создает исключение, если Deque не имеет элементов. |
E peekFirst() | Возвращает первый элемент Deque, но не удаляет его из Deque. Этот метод возвращает null, если Deque не имеет элементов. |
E getLast() / E peekLast()
E getLast() | Возвращает последний элемент Deque, но не удаляет его из Deque. Этот метод создает исключение, если Deque не имеет элементов. |
E peekLast() | Возвращает последний элемент Deque, но не удаляет его из Deque. Этот метод возвращает null, если Deque не имеет элементов. |
Methods inherited from Queue:
Унаследованные методы из Queue и соответствующие методы в Deque:
booleanadd(E) | booleanaddLast(E) | (*) |
booleanoffer(E) | booleanofferLast(E) | (*) |
E remove() | E removeFirst() | |
E poll() | E pollFirst() | |
E element() | E getFirst() | |
E peek() | E peekFirst() |
(*) - В большинстве типов Queue, 2 метода add(E) и offer(E) вставляют элемент в конец. Но это не верно для PriorityQueue, поскольку PriorityQueue определяет положение вставленного элемента на основе его приоритета
Stack?
Deque может действовать как stack (стек), поскольку он предоставляет методы для работы в рамках механизма LIFO (Last In First Out) (последний добавленный элемент будет извлечен первым).
boolean push(e) | boolean addFirst(e) |
E pop() | E removeFirst() |
E peek() | E getFirst() |
3. Examples
Deque - это интерфейс, поэтому для создания объекта Deque необходимо использовать один из его подклассов, таких как ArrayDeque, ConcurrentLinkedDeque, LinkedList, LinkedBlockingDeque.
Deque<String> deque = new ArrayDeque<>();
Deque<String> deque = new LinkedList<>();
Класс Customer будет участвовать в примерах.
Customer.java
package com.o7planning.deque.ex;
public class Customer {
private Integer cusId;
private String cusName;
public Customer(Integer cusId, String cusName) {
super();
this.cusId = cusId;
this.cusName = cusName;
}
public Integer getCusId() {
return cusId;
}
public String getCusName() {
return cusName;
}
}
DequeEx1.java
package com.o7planning.deque.ex;
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeEx1 {
public static void main(String[] args) {
// Create a Deque with maximum capacity of 10 elements.
Deque<Customer> deque = new ArrayDeque<Customer>(10);
deque.addFirst(new Customer(1, "Tom"));
deque.addFirst(new Customer(2, "Jerry"));
deque.addLast(new Customer(3, "Donald"));
Customer current = null;
// Retrieve first element and remove it from Deque.
while((current = deque.pollFirst())!= null) {
System.out.println("Serving customer: " + current.getCusName());
}
}
}
Output:
Serving customer: Jerry
Serving customer: Tom
Serving customer: Donald
Deque можно использовать как stack (стек). См. пример моделирования карт (cards):
DequeStackEx1.java
package com.o7planning.deque.ex;
import java.util.Deque;
import java.util.LinkedList;
public class DequeStackEx1 {
public static void main(String[] args) {
// Create a Deque to use as a Stack.
Deque<String> stackOfCards = new LinkedList<>();
// Pushing new items to the Stack
stackOfCards.push("Jack");
stackOfCards.push("Queen");
stackOfCards.push("King");
stackOfCards.push("Ace");
System.out.println("Stack => " + stackOfCards);
System.out.println();
// Popping items from the Stack
String cardAtTop = stackOfCards.pop(); // Throws NoSuchElementException if the stack is empty
System.out.println("Stack.pop() => " + cardAtTop);
System.out.println("Current Stack => " + stackOfCards);
System.out.println();
// Get the item at the top of the stack without removing it
cardAtTop = stackOfCards.peek();
System.out.println("Stack.peek() => " + cardAtTop);
System.out.println("Current Stack => " + stackOfCards);
}
}
Output:
Stack => [Ace, King, Queen, Jack]
Stack.pop() => Ace
Current Stack => [King, Queen, Jack]
Stack.peek() => King
Current Stack => [King, Queen, Jack]
Руководства Java Collections Framework
- Руководство Java PriorityBlockingQueue
- Руководство Java Collections Framework
- Руководство Java SortedSet
- Руководство Java List
- Руководство Java Iterator
- Руководство Java NavigableSet
- Руководство Java ListIterator
- Руководство Java ArrayList
- Руководство Java CopyOnWriteArrayList
- Руководство Java LinkedList
- Руководство Java Set
- Руководство Java TreeSet
- Руководство Java CopyOnWriteArraySet
- Руководство Java Queue
- Руководство Java Deque
- Руководство Java IdentityHashMap
- Руководство Java WeakHashMap
- Руководство Java Map
- Руководство Java SortedMap
- Руководство Java NavigableMap
- Руководство Java HashMap
- Руководство Java TreeMap
- Руководство Java PriorityQueue
- Руководство Java BlockingQueue
- Руководство Java ArrayBlockingQueue
- Руководство Java TransferQueue
Show More