Java : ArrayDeque (両端キュー) - API使用例
ArrayDeque (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
Queue は先入れ先出し(FIFO)ですが、Dequeインタフェース では両端からの挿入・削除が可能です。
ArrayDeque は、ArrayList のように効率のよい Deque の実装です。
final var deque = new ArrayDeque<String>();
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 var deque = new ArrayDeque<String>();
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); // []
コンストラクタ
ArrayDeque ()
final var deque = new ArrayDeque<String>();
System.out.println(deque); // []
System.out.println(deque.isEmpty()); // true
deque.addLast("aaa");
deque.addLast("bbb");
deque.addLast("ccc");
System.out.println(deque); // [aaa, bbb, ccc]
System.out.println(deque.size()); // 3
ArrayDeque (int numElements)
初期容量を変えて処理時間を計った例です。
(実行する環境によって変わる可能性があります)
final var deque = new ArrayDeque<String>(10000000);
System.out.println(deque); // []
final var startTime = System.nanoTime();
for (int i = 0; i < 1000000; i++) {
deque.addLast(String.valueOf(i));
}
final var endTime = System.nanoTime();
// 0.053015 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var deque = new ArrayDeque<String>(1);
System.out.println(deque); // []
final var startTime = System.nanoTime();
for (int i = 0; i < 1000000; i++) {
deque.addLast(String.valueOf(i));
}
final var endTime = System.nanoTime();
// 0.066947 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
ArrayDeque (Collection<? extends E> c)
final var c = List.of("a", "b", "c");
final var deque = new ArrayDeque<>(c);
System.out.println(deque); // [a, b, c]
System.out.println(deque.size()); // 3
メソッド
boolean add (E e)
このメソッドは addLast(E e) と同等です。
API使用例はそちらをご参照ください。
boolean addAll (Collection<? extends E> c)
final var deque = new ArrayDeque<String>();
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)
final var deque = new ArrayDeque<String>();
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]
void addLast (E e)
final var deque = new ArrayDeque<String>();
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]
void clear ()
final var deque = new ArrayDeque<String>();
System.out.println(deque); // []
deque.addLast("a");
System.out.println(deque); // [a]
deque.addLast("b");
System.out.println(deque); // [a, b]
deque.clear();
System.out.println(deque); // []
ArrayDeque<E> clone ()
final var deque = new ArrayDeque<String>();
deque.addLast("a");
deque.addLast("b");
deque.addLast("c");
System.out.println(deque); // [a, b, c]
final var cloned = deque.clone();
System.out.println(cloned); // [a, b, c]
System.out.println(cloned.getClass()); // class java.util.ArrayDeque
boolean contains (Object o)
final var 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 var 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);
// 結果
// ↓
//-- forEachRemaining --
//ccc
//bbb
//aaa
E element ()
このメソッドは getFirst() と同等です。
API使用例はそちらをご参照ください。
void forEach (Consumer<? super E> action)
final var deque = new ArrayDeque<>(List.of("aaa", "bbb", "ccc"));
System.out.println(deque); // [aaa, bbb, ccc]
System.out.println("-- forEach --");
deque.forEach(value -> {
System.out.println("value = " + value);
});
// 結果
// ↓
//-- forEach --
//value = aaa
//value = bbb
//value = ccc
E getFirst ()
final var deque = new ArrayDeque<String>();
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(e);
}
// 結果
// ↓
//java.util.NoSuchElementException
E getLast ()
final var deque = new ArrayDeque<String>();
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(e);
}
// 結果
// ↓
//java.util.NoSuchElementException
boolean isEmpty ()
final var deque = new ArrayDeque<String>();
deque.addLast("a");
deque.addLast("b");
deque.addLast("c");
System.out.println(deque); // [a, b, c]
System.out.println(deque.isEmpty()); // false
deque.clear();
System.out.println(deque); // []
System.out.println(deque.isEmpty()); // true
Iterator<E> iterator ()
final var 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(value -> {
System.out.println("value = " + value);
});
// 結果
// ↓
//-- forEachRemaining --
//value = aaa
//value = bbb
//value = ccc
boolean offer (E e)
このメソッドは offerLast(E e) と同等です。
API使用例はそちらをご参照ください。
boolean offerFirst (E e)
final var deque = new ArrayDeque<String>();
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]
boolean offerLast (E e)
final var deque = new ArrayDeque<String>();
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]
E peek ()
このメソッドは peekFirst() と同等です。
API使用例はそちらをご参照ください。
E peekFirst ()
final var deque = new ArrayDeque<String>();
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 ()
final var deque = new ArrayDeque<String>();
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 ()
このメソッドは pollFirst() と同等です。
API使用例はそちらをご参照ください。
E pollFirst ()
final var deque = new ArrayDeque<String>();
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 ()
final var deque = new ArrayDeque<String>();
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 ()
このメソッドは removeFirst() と同等です。
API使用例はそちらをご参照ください。
void push (E e)
このメソッドは addFirst(E e) と同等です。
API使用例はそちらをご参照ください。
E remove ()
このメソッドは removeFirst() と同等です。
API使用例はそちらをご参照ください。
boolean remove (Object o)
このメソッドは removeFirstOccurrence(Object o) と同等です。
API使用例はそちらをご参照ください。
boolean removeAll (Collection<?> c)
final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of())); // false
System.out.println(deque); // [a, b, a, b, A, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("a"))); // true
System.out.println(deque); // [b, b, A, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("a", "b"))); // true
System.out.println(deque); // [A, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("b", "a"))); // true
System.out.println(deque); // [A, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("A"))); // true
System.out.println(deque); // [a, b, a, b, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("X", "Y", "Z"))); // false
System.out.println(deque); // [a, b, a, b, A, B]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.removeAll(List.of("A", "X", "Y", "Z"))); // true
System.out.println(deque); // [a, b, a, b, B]
}
E removeFirst ()
final var deque = new ArrayDeque<String>();
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(e);
}
// 結果
// ↓
//java.util.NoSuchElementException
boolean removeFirstOccurrence (Object o)
final var 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("BBB")); // true
System.out.println(deque); // [aaa, ccc]
System.out.println(deque.removeFirstOccurrence("XXX")); // false
System.out.println(deque); // [aaa, ccc]
boolean removeIf (Predicate<? super E> filter)
final var deque = new ArrayDeque<String>();
deque.addLast("aaa");
deque.addLast("BBB");
deque.addLast("ccc");
deque.addLast("DDD");
System.out.println(deque); // [aaa, BBB, ccc, DDD]
final var ret = deque.removeIf(s -> {
// 大文字であるかチェックします。
return s.equals(s.toUpperCase());
});
System.out.println(ret); // true
System.out.println(deque); // [aaa, ccc]
final var deque = new ArrayDeque<String>();
deque.addLast("aaa");
deque.addLast("bbb");
System.out.println(deque); // [aaa, bbb]
final var ret = deque.removeIf(s -> s.equals(s.toUpperCase()));
System.out.println(ret); // false
System.out.println(deque); // [aaa, bbb]
E removeLast ()
final var deque = new ArrayDeque<String>();
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(e);
}
// 結果
// ↓
//java.util.NoSuchElementException
boolean removeLastOccurrence (Object o)
final var 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]
boolean retainAll (Collection<?> c)
final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of())); // true
System.out.println(deque); // []
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("a", "b"))); // true
System.out.println(deque); // [a, b, a, b]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("b", "a"))); // true
System.out.println(deque); // [a, b, a, b]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("A"))); // true
System.out.println(deque); // [A]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("X", "Y", "Z"))); // true
System.out.println(deque); // []
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("A", "X", "Y", "Z"))); // true
System.out.println(deque); // [A]
}
{
final var deque = new ArrayDeque<>(src);
System.out.println(deque); // [a, b, a, b, A, B]
System.out.println(deque.retainAll(List.of("a", "b", "A", "B"))); // false
System.out.println(deque); // [a, b, a, b, A, B]
}
int size ()
final var deque = new ArrayDeque<String>();
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
Spliterator<E> spliterator ()
final var deque = new ArrayDeque<>(List.of("aaa", "bbb", "ccc"));
System.out.println(deque); // [aaa, bbb, ccc]
final var spliterator = deque.spliterator();
System.out.println("-- forEachRemaining --");
spliterator.forEachRemaining(value -> {
System.out.println("value = " + value);
});
// 結果
// ↓
//-- forEachRemaining --
//value = aaa
//value = bbb
//value = ccc
Object[] toArray ()
final var deque = new ArrayDeque<>(List.of("a", "b", "c"));
System.out.println(deque); // [a, b, c]
final Object[] array = deque.toArray();
System.out.println(Arrays.toString(array)); // [a, b, c]
<T> T[] toArray (T[] a)
final var deque = new ArrayDeque<>(List.of("a", "b", "c"));
System.out.println(deque); // [a, b, c]
final String[] array = deque.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // [a, b, c]
final var deque = new ArrayDeque<>(List.of("a", "b", "c"));
System.out.println(deque); // [a, b, c]
{
final String[] array = new String[3];
System.out.println(Arrays.toString(array)); // [null, null, null]
final var ret = deque.toArray(array);
System.out.println(Arrays.toString(array)); // [a, b, c]
System.out.println(Arrays.toString(ret)); // [a, b, c]
}
{
final String[] array = new String[5];
System.out.println(Arrays.toString(array)); // [null, null, null, null, null]
final var ret = deque.toArray(array);
System.out.println(Arrays.toString(array)); // [a, b, c, null, null]
System.out.println(Arrays.toString(ret)); // [a, b, c, null, null]
}
{
final String[] array = new String[1];
System.out.println(Arrays.toString(array)); // [null]
final var ret = deque.toArray(array);
System.out.println(Arrays.toString(array)); // [null]
System.out.println(Arrays.toString(ret)); // [a, b, c]
}
AbstractCollectionで宣言されたメソッド
containsAll, toString
「Java API 使用例 : AbstractCollection」をご参照ください。
Collectionで宣言されたメソッド
containsAll, equals, hashCode, parallelStream, stream, toArray
「Java API 使用例 : Collection」をご参照ください。
関連記事
- List(リスト)の基本
- Map(マップ)の基本
- Set(セット)の基本
- List の初期化方法いろいろ
- Map の初期化方法いろいろ
- Set の初期化方法いろいろ
- 配列 vs. List
- 配列からListへの変換
- List から配列への変換
- API 使用例
- Collection (コレクション)
- Collections (コレクション操作)
- Comparable
- Comparator
- Iterator
- List (リスト)
- Map (マップ)
- Map.Entry (キーと値のペア)
- Queue (キュー)
- AbstractQueue
- ArrayBlockingQueue (ブロッキング・配列キュー)
- BlockingDeque (ブロッキング・両端キュー)
- BlockingQueue (ブロッキング・キュー)
- ConcurrentLinkedDeque (並列処理用・両端キュー)
- ConcurrentLinkedQueue (並列処理用キュー)
- Deque (両端キュー)
- LinkedBlockingDeque (ブロッキング・リンク両端キュー)
- LinkedBlockingQueue (ブロッキング・リンクキュー)
- LinkedList (二重リンク・リスト)
- PriorityBlockingQueue (ブロッキング・優先度付きキュー)
- PriorityQueue (優先度付きキュー)
- RandomAccess
- Set (セット)
- Spliterator