我使用 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。
元素的添加也是同步的。
有谁知道异常原因可能是什么?
感谢您的任何想法