020 コレクションフレームワーク(QueueとDeque) 026 解答例

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.NoSuchElementException;

public class CustomBoundedDeque<T> implements Deque<T> {

    private ArrayDeque<T> boundedDeque; // 内部で使用する ArrayDeque インスタンス
    private int maxSize; // デックの最大容量

    // コンストラクタ
    public CustomBoundedDeque(int maxSize) {
        if (maxSize <= 0) {
            throw new IllegalArgumentException("Maximum size should be greater than 0");
        }
        this.boundedDeque = new ArrayDeque<>();
        this.maxSize = maxSize;
    }

    // デックの先頭に要素を追加するメソッド
    @Override
    public void addFirst(T element) {
        // デックのサイズが最大容量に達した場合、末尾の要素を削除
        if (boundedDeque.size() == maxSize) {
            boundedDeque.removeLast();
        }
        // 先頭に要素を追加
        boundedDeque.addFirst(element);
    }

    // デックの末尾に要素を追加するメソッド
    @Override
    public void addLast(T element) {
        // デックのサイズが最大容量に達した場合、先頭の要素を削除
        if (boundedDeque.size() == maxSize) {
            boundedDeque.removeFirst();
        }
        // 末尾に要素を追加
        boundedDeque.addLast(element);
    }

    // デックの先頭から要素を取り出すメソッド
    @Override
    public T removeFirst() {
        // デックが空の場合、例外をスロー
        if (isEmpty()) {
            throw new NoSuchElementException("Deque is empty");
        }
        // 先頭の要素を取り出して返す
        return boundedDeque.removeFirst();
    }

    // デックの末尾から要素を取り出すメソッド
    @Override
    public T removeLast() {
        // デックが空の場合、例外をスロー
        if (isEmpty()) {
            throw new NoSuchElementException("Deque is empty");
        }
        // 末尾の要素を取り出して返す
        return boundedDeque.removeLast();
    }

    // デックが空かどうかを判定するメソッド
    @Override
    public boolean isEmpty() {
        return boundedDeque.isEmpty();
    }

    // 以下は Deque インターフェースの他のメソッドに対する実装が必要ですが、この例では省略しています。
    // 必要に応じて実装してください。
}

この解答例では、ArrayDeque を使用してデックを実装し、指定された最大容量に達した場合に適切に要素を削除してから追加しています。

「020 コレクションフレームワーク」問題集リスト