Java 6 コレクション API を使用します。N 個の要素のみを持つコレクションが必要です。つまり、新しい要素を追加してコレクションに既に N 個の要素がある場合、最後の要素を削除して新しい要素をコレクションの先頭に追加する必要があります。私はそれを行うために次のコードフラグメントを持っています:
class A {
int N = 100;
Deque dq = new LinkedList();
void add(Object o) {
synchronized (o) {
if (dq.size() == N) {
dq.pollLast();
}
dq.add(o);
}
}
Deque getDq() {
return new LinkedList(dq);
}
}
タイプ A のオブジェクトには、多くのユーザーが同時にアクセスして、新しい要素を追加できます。実際には、それで NullPointerException を取得しました。
Caused by: java.lang.NullPointerException
at java.util.LinkedList.remove(LinkedList.java:790)
at java.util.LinkedList.removeLast(LinkedList.java:144)
at java.util.LinkedList.pollLast(LinkedList.java:573)
at A.add(A.java:9)
Deque.pollLast() コントラクトは NullPointerException について何も述べていません:
このリストの最後の要素を取得して削除するか、このリストが空の場合は null を返します。
また、要素の追加も同期されます。
例外の理由が何であるかを知っている人はいますか?
アイデアをありがとう