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 コレクションフレームワークã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント