Java : AbstractQueue - API使用例
AbstractQueue (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
必要最低限の独自実装の例です。
(注意:実装に ArrayList を使っていますが、効率はよくないかもしれません)
class MyQueue extends AbstractQueue<String> {
private final List<String> values = new ArrayList<>();
@Override
public Iterator<String> iterator() {
return values.iterator();
}
@Override
public int size() {
return values.size();
}
@Override
public boolean offer(String s) {
Objects.requireNonNull(s);
return values.add(s);
}
@Override
public String poll() {
return values.isEmpty() ? null : values.remove(0);
}
@Override
public String peek() {
return values.isEmpty() ? null : values.get(0);
}
}
final var queue = new MyQueue();
queue.offer("aaa");
queue.offer("bbb");
queue.offer("ccc");
System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.poll()); // aaa
System.out.println(queue.poll()); // bbb
System.out.println(queue.poll()); // ccc
コンストラクタ
AbstractQueue ()
class MyQueue extends AbstractQueue<String> {
private final List<String> values = new ArrayList<>();
@Override
public Iterator<String> iterator() {
return values.iterator();
}
@Override
public int size() {
return values.size();
}
@Override
public boolean offer(String s) {
Objects.requireNonNull(s);
return values.add(s);
}
@Override
public String poll() {
return values.isEmpty() ? null : values.remove(0);
}
@Override
public String peek() {
return values.isEmpty() ? null : values.get(0);
}
}
final var queue = new MyQueue();
queue.offer("aaa");
queue.offer("bbb");
queue.offer("ccc");
System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.poll()); // aaa
System.out.println(queue.poll()); // bbb
System.out.println(queue.poll()); // ccc
メソッド
boolean add (E e)
// capacity = 3
final AbstractQueue<String> queue = new ArrayBlockingQueue<>(3);
System.out.println(queue); // []
System.out.println(queue.add("aaa")); // true
System.out.println(queue); // [aaa]
System.out.println(queue.add("bbb")); // true
System.out.println(queue); // [aaa, bbb]
System.out.println(queue.add("ccc")); // true
System.out.println(queue); // [aaa, bbb, ccc]
try {
queue.add("ddd");
} catch (IllegalStateException e) {
System.out.println("IllegalStateException! : " + e.getMessage());
}
// 結果
// ↓
//IllegalStateException! : Queue full
boolean addAll (Collection<? extends E> c)
final AbstractQueue<String> queue = new ArrayBlockingQueue<>(10);
System.out.println(queue); // []
System.out.println(queue.addAll(List.of("a1"))); // true
System.out.println(queue); // [a1]
System.out.println(queue.addAll(List.of("b1", "b2"))); // true
System.out.println(queue); // [a1, b1, b2]
System.out.println(queue.addAll(List.of("c1", "c2", "c3"))); // true
System.out.println(queue); // [a1, b1, b2, c1, c2, c3]
void clear ()
final AbstractQueue<String> queue = new ArrayBlockingQueue<>(10);
System.out.println(queue); // []
queue.add("a");
System.out.println(queue); // [a]
queue.add("b");
System.out.println(queue); // [a, b]
queue.clear();
System.out.println(queue); // []
E element ()
final AbstractQueue<String> queue = new ArrayBlockingQueue<>(10);
System.out.println(queue); // []
queue.add("aaa");
queue.add("bbb");
queue.add("ccc");
System.out.println(queue.element()); // aaa
System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.remove()); // aaa
System.out.println(queue); // [bbb, ccc]
System.out.println(queue.element()); // bbb
System.out.println(queue); // [bbb, ccc]
System.out.println(queue.remove()); // bbb
System.out.println(queue); // [ccc]
System.out.println(queue.element()); // ccc
System.out.println(queue); // [ccc]
System.out.println(queue.remove()); // ccc
System.out.println(queue); // []
try {
queue.element();
} catch (NoSuchElementException e) {
System.out.println("NoSuchElementException!");
}
// 結果
// ↓
//NoSuchElementException!
E remove ()
final AbstractQueue<String> queue = new ArrayBlockingQueue<>(10);
System.out.println(queue); // []
queue.add("aaa");
queue.add("bbb");
queue.add("ccc");
System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.remove()); // aaa
System.out.println(queue); // [bbb, ccc]
System.out.println(queue.remove()); // bbb
System.out.println(queue); // [ccc]
System.out.println(queue.remove()); // ccc
System.out.println(queue); // []
try {
queue.remove();
} catch (NoSuchElementException e) {
System.out.println("NoSuchElementException!");
}
// 結果
// ↓
//NoSuchElementException!
AbstractCollectionで宣言されたメソッド
contains, containsAll, isEmpty, iterator, remove, removeAll, retainAll, toArray, toArray, toString
「Java API 使用例 : AbstractCollection」をご参照ください。
Collectionで宣言されたメソッド
contains, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, remove, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
「Java API 使用例 : Collection」をご参照ください。
Iterableで宣言されたメソッド
forEach
「Java API 使用例 : Iterable」をご参照ください。
Queueで宣言されたメソッド
offer, peek, poll
「Java API 使用例 : Queue」をご参照ください。
関連記事
- List(リスト)の基本
- Map(マップ)の基本
- Set(セット)の基本
- List の初期化方法いろいろ
- Map の初期化方法いろいろ
- Set の初期化方法いろいろ
- 配列 vs. List
- 配列からListへの変換
- List から配列への変換
- API 使用例
- Collection (コレクション)
- Collections (コレクション操作)
- Comparable
- Comparator
- Iterator
- List (リスト)
- Map (マップ)
- Map.Entry (キーと値のペア)
- Queue (キュー)
- ArrayBlockingQueue (ブロッキング・配列キュー)
- ArrayDeque (両端キュー)
- BlockingDeque (ブロッキング・両端キュー)
- BlockingQueue (ブロッキング・キュー)
- ConcurrentLinkedDeque (並列処理用・両端キュー)
- ConcurrentLinkedQueue (並列処理用キュー)
- Deque (両端キュー)
- LinkedBlockingDeque (ブロッキング・リンク両端キュー)
- LinkedBlockingQueue (ブロッキング・リンクキュー)
- LinkedList (二重リンク・リスト)
- PriorityBlockingQueue (ブロッキング・優先度付きキュー)
- PriorityQueue (優先度付きキュー)
- RandomAccess
- Set (セット)
- Spliterator