Java : Deque 示例

Java 中的 Deque (Java SE 23 & JDK 23) 及其示例。
您将找到大多数 Deque<E> 方法的代码示例。

注解 :

  • 本文可能使用了翻译软件以方便阅读。 另请查看英文原文

简介

支持在两端插入和移除元素的线性集合。deque 是“双端队列”的缩写,通常发音为“deck”。 (机器翻译)

Class diagram

final Deque<String> deque = new ArrayDeque<>();

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.removeFirst()); // aaa
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.removeFirst()); // bbb
System.out.println(deque); // [ccc]

System.out.println(deque.removeFirst()); // ccc
System.out.println(deque); // []
final Deque<String> deque = new ArrayDeque<>();

deque.addLast("xxx");
deque.addLast("yyy");
deque.addLast("zzz");

System.out.println(deque); // [xxx, yyy, zzz]

System.out.println(deque.removeLast()); // zzz
System.out.println(deque); // [xxx, yyy]

System.out.println(deque.removeLast()); // yyy
System.out.println(deque); // [xxx]

System.out.println(deque.removeLast()); // xxx
System.out.println(deque); // []

Methods

boolean add (E e)

如果可以立即执行此操作而不违反容量限制,则将指定元素插入此双端队列表示的队列中(换句话说,插入到此双端队列的尾部),成功时返回 true,如果当前没有可用空间,则抛出 IllegalStateException。 (机器翻译)

This method is equivalent to addLast(E e).

boolean addAll (Collection<? extends E> c)

将指定集合中的所有元素添加到此双端队列的末尾,就像对每个元素调用 addLast(E) 一样,按照集合迭代器返回的顺序添加它们。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

System.out.println(deque.addAll(List.of("a1"))); // true
System.out.println(deque); // [a1]

System.out.println(deque.addAll(List.of("b1", "b2"))); // true
System.out.println(deque); // [a1, b1, b2]

System.out.println(deque.addAll(List.of("c1", "c2", "c3"))); // true
System.out.println(deque); // [a1, b1, b2, c1, c2, c3]

void addFirst (E e)

如果可以立即执行此操作而不违反容量限制,则将指定元素插入此双端队列的前面;如果当前没有可用空间,则抛出 IllegalStateException。 (机器翻译)

// capacity = 3
final Deque<String> deque = new LinkedBlockingDeque<>(3);
System.out.println(deque); // []

deque.addFirst("aaa");
System.out.println(deque); // [aaa]

deque.addFirst("bbb");
System.out.println(deque); // [bbb, aaa]

deque.addFirst("ccc");
System.out.println(deque); // [ccc, bbb, aaa]

try {
    deque.addFirst("ddd");
} catch (IllegalStateException e) {
    System.out.println("IllegalStateException! : " + e.getMessage());
}

// Result
// ↓
//IllegalStateException! : Deque full

void addLast (E e)

如果可以立即执行此操作而不违反容量限制,则将指定元素插入此双端队列的末尾,如果当前没有可用空间,则抛出 IllegalStateException。 (机器翻译)

// capacity = 3
final Deque<String> deque = new LinkedBlockingDeque<>(3);
System.out.println(deque); // []

deque.addLast("aaa");
System.out.println(deque); // [aaa]

deque.addLast("bbb");
System.out.println(deque); // [aaa, bbb]

deque.addLast("ccc");
System.out.println(deque); // [aaa, bbb, ccc]

try {
    deque.addLast("ddd");
} catch (IllegalStateException e) {
    System.out.println("IllegalStateException! : " + e.getMessage());
}

// Result
// ↓
//IllegalStateException! : Deque full

boolean contains (Object o)

如果此双端队列包含指定元素,则返回 true。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>(List.of("aaa", "bbb", "ccc"));
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.contains("aaa")); // true
System.out.println(deque.contains("bbb")); // true
System.out.println(deque.contains("XXX")); // false

Iterator<E> descendingIterator ()

返回以相反顺序遍历此双端队列中元素的迭代器。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>(List.of("aaa", "bbb", "ccc"));
System.out.println(deque); // [aaa, bbb, ccc]

final var iterator = deque.descendingIterator();

System.out.println("-- forEachRemaining --");
iterator.forEachRemaining(System.out::println);

// Result
// ↓
//-- forEachRemaining --
//ccc
//bbb
//aaa

E element ()

检索但不删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。 (机器翻译)

This method is equivalent to getFirst().

E getFirst ()

检索此双端队列的第一个元素,但不删除它。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque.getFirst()); // aaa
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.removeFirst()); // aaa
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.getFirst()); // bbb
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.removeFirst()); // bbb
System.out.println(deque); // [ccc]

System.out.println(deque.getFirst()); // ccc
System.out.println(deque); // [ccc]

System.out.println(deque.removeFirst()); // ccc
System.out.println(deque); // []

try {
    deque.getFirst();
} catch (NoSuchElementException e) {
    System.out.println("NoSuchElementException!");
}

// Result
// ↓
//NoSuchElementException!

E getLast ()

检索此双端队列的最后一个元素,但不删除它。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque.getLast()); // ccc
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.removeLast()); // ccc
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.getLast()); // bbb
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.removeLast()); // bbb
System.out.println(deque); // [aaa]

System.out.println(deque.getLast()); // aaa
System.out.println(deque); // [aaa]

System.out.println(deque.removeLast()); // aaa
System.out.println(deque); // []

try {
    deque.getLast();
} catch (NoSuchElementException e) {
    System.out.println("NoSuchElementException!");
}

// Result
// ↓
//NoSuchElementException!

Iterator<E> iterator ()

按正确顺序返回此双端队列中元素的迭代器。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>(List.of("aaa", "bbb", "ccc"));
System.out.println(deque); // [aaa, bbb, ccc]

final var iterator = deque.iterator();

System.out.println("-- forEachRemaining --");
iterator.forEachRemaining(System.out::println);

// Result
// ↓
//-- forEachRemaining --
//aaa
//bbb
//ccc

boolean offer (E e)

如果可以立即执行此操作而不违反容量限制,则将指定元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),成功时返回 true,如果当前没有可用空间,则返回 false。 (机器翻译)

This method is equivalent to offerLast(E e).

boolean offerFirst (E e)

将指定元素插入此双端队列的前面,除非它违反容量限制。 (机器翻译)

// capacity = 3
final Deque<String> deque = new LinkedBlockingDeque<>(3);
System.out.println(deque); // []

System.out.println(deque.offerFirst("aaa")); // true
System.out.println(deque); // [aaa]

System.out.println(deque.offerFirst("bbb")); // true
System.out.println(deque); // [bbb, aaa]

System.out.println(deque.offerFirst("ccc")); // true
System.out.println(deque); // [ccc, bbb, aaa]

System.out.println(deque.offerFirst("ddd")); // false
System.out.println(deque); // [ccc, bbb, aaa]

boolean offerLast (E e)

将指定元素插入此双端队列的末尾,除非它违反容量限制。 (机器翻译)

// capacity = 3
final Deque<String> deque = new LinkedBlockingDeque<>(3);
System.out.println(deque); // []

System.out.println(deque.offerLast("aaa")); // true
System.out.println(deque); // [aaa]

System.out.println(deque.offerLast("bbb")); // true
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.offerLast("ccc")); // true
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.offerLast("ddd")); // false
System.out.println(deque); // [aaa, bbb, ccc]

E peek ()

检索此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素),但不移除该队列;如果此双端队列为空,则返回 null。 (机器翻译)

This method is equivalent to peekFirst().

E peekFirst ()

检索此双端队列的第一个元素,但不删除该元素;如果此双端队列为空,则返回 null。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque.peekFirst()); // aaa
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.pollFirst()); // aaa
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.peekFirst()); // bbb
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.pollFirst()); // bbb
System.out.println(deque); // [ccc]

System.out.println(deque.peekFirst()); // ccc
System.out.println(deque); // [ccc]

System.out.println(deque.pollFirst()); // ccc
System.out.println(deque); // []

System.out.println(deque.peekFirst()); // null
System.out.println(deque); // []

E peekLast ()

检索此双端队列的最后一个元素,但不删除该元素;如果此双端队列为空,则返回 null。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque.peekLast()); // ccc
System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.pollLast()); // ccc
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.peekLast()); // bbb
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.pollLast()); // bbb
System.out.println(deque); // [aaa]

System.out.println(deque.peekLast()); // aaa
System.out.println(deque); // [aaa]

System.out.println(deque.pollLast()); // aaa
System.out.println(deque); // []

System.out.println(deque.peekLast()); // null
System.out.println(deque); // []

E poll ()

检索并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回 null。 (机器翻译)

This method is equivalent to pollFirst().

E pollFirst ()

检索并移除此双端队列的第一个元素,如果此双端队列为空,则返回 null。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.add("aaa");
deque.add("bbb");
deque.add("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.pollFirst()); // aaa
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.pollFirst()); // bbb
System.out.println(deque); // [ccc]

System.out.println(deque.pollFirst()); // ccc
System.out.println(deque); // []

System.out.println(deque.pollFirst()); // null
System.out.println(deque); // []

E pollLast ()

检索并移除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.add("aaa");
deque.add("bbb");
deque.add("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.pollLast()); // ccc
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.pollLast()); // bbb
System.out.println(deque); // [aaa]

System.out.println(deque.pollLast()); // aaa
System.out.println(deque); // []

System.out.println(deque.pollLast()); // null
System.out.println(deque); // []

E pop ()

从此双端队列所表示的堆栈中弹出一个元素。 (机器翻译)

This method is equivalent to removeFirst().

void push (E e)

如果可以立即执行此操作而不违反容量限制,则将元素推送到此双端队列表示的堆栈上(换句话说,推送到此双端队列的头部);如果当前没有可用空间,则抛出 IllegalStateException。 (机器翻译)

This method is equivalent to addFirst(E e).

E remove ()

检索并移除此双端队列所表示的队列的头(换句话说,此双端队列的第一个元素)。 (机器翻译)

This method is equivalent to removeFirst().

boolean remove (Object o)

从此双端队列中移除第一次出现的指定元素。 (机器翻译)

This method is equivalent to removeFirstOccurrence(Object o).

E removeFirst ()

检索并删除此双端队列的第一个元素。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.add("aaa");
deque.add("bbb");
deque.add("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.removeFirst()); // aaa
System.out.println(deque); // [bbb, ccc]

System.out.println(deque.removeFirst()); // bbb
System.out.println(deque); // [ccc]

System.out.println(deque.removeFirst()); // ccc
System.out.println(deque); // []

try {
    deque.removeFirst();
} catch (NoSuchElementException e) {
    System.out.println("NoSuchElementException!");
}

// Result
// ↓
//NoSuchElementException!

boolean removeFirstOccurrence (Object o)

从此双端队列中移除第一次出现的指定元素。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>(List.of("aaa", "BBB", "aaa", "BBB", "ccc"));
System.out.println(deque); // [aaa, BBB, aaa, BBB, ccc]

System.out.println(deque.removeFirstOccurrence("aaa")); // true
System.out.println(deque); // [BBB, aaa, BBB, ccc]

System.out.println(deque.removeFirstOccurrence("BBB")); // true
System.out.println(deque); // [aaa, BBB, ccc]

System.out.println(deque.removeFirstOccurrence("XXX")); // false
System.out.println(deque); // [aaa, BBB, ccc]

E removeLast ()

检索并删除此双端队列的最后一个元素。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []

deque.add("aaa");
deque.add("bbb");
deque.add("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

System.out.println(deque.removeLast()); // ccc
System.out.println(deque); // [aaa, bbb]

System.out.println(deque.removeLast()); // bbb
System.out.println(deque); // [aaa]

System.out.println(deque.removeLast()); // aaa
System.out.println(deque); // []

try {
    deque.removeLast();
} catch (NoSuchElementException e) {
    System.out.println("NoSuchElementException!");
}

// Result
// ↓
//NoSuchElementException!

boolean removeLastOccurrence (Object o)

从此双端队列中移除最后一次出现的指定元素。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>(List.of("aaa", "BBB", "aaa", "BBB", "ccc"));
System.out.println(deque); // [aaa, BBB, aaa, BBB, ccc]

System.out.println(deque.removeLastOccurrence("BBB")); // true
System.out.println(deque); // [aaa, BBB, aaa, ccc]

System.out.println(deque.removeLastOccurrence("aaa")); // true
System.out.println(deque); // [aaa, BBB, ccc]

System.out.println(deque.removeLastOccurrence("XXX")); // false
System.out.println(deque); // [aaa, BBB, ccc]

default Deque<E> reversed ()

返回此集合的反向排序视图。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();

deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");

System.out.println(deque); // [aaa, bbb, ccc]

final var reversed = deque.reversed();
System.out.println(reversed); // [ccc, bbb, aaa]

System.out.println(reversed.reversed()); // [aaa, bbb, ccc]

int size ()

返回此双端队列中的元素数量。 (机器翻译)

final Deque<String> deque = new ArrayDeque<>();
System.out.println(deque); // []
System.out.println(deque.size()); // 0

deque.addLast("aaa");
System.out.println(deque); // [aaa]
System.out.println(deque.size()); // 1

deque.addLast("bbb");
System.out.println(deque); // [aaa, bbb]
System.out.println(deque.size()); // 2

deque.addLast("ccc");
System.out.println(deque); // [aaa, bbb, ccc]
System.out.println(deque.size()); // 3

Methods declared in Collection

clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray

请参阅下面的链接。

Methods declared in Iterable

forEach

请参阅下面的链接。


相关文章

To top of page