[英]Override stack.peek() to return null if the stack is empty
在 Java 中,如果在空堆栈上调用peek()
方法,则会引发异常。 目前,为了解决这个问题,我必须在调用peek()
之前检查堆栈是否为空。
有没有办法覆盖peek()
方法,以便它在堆栈为空时返回null
而不是抛出异常?
我认为您可以像这样简单地扩展自己的堆栈版本:
public class MyCustomStack<E> extends Stack<E> {
@Override
public synchronized E peek() {
if (isEmpty()) {
return null;
}
return super.peek();
}
}
您可以使用任何在 Java 中不是 final 的类来执行此操作。 查继承。
public class HackedStack<E> extends Stack<E> {
@Override
public E peek() {
//do your thing
}
}
尽管您可以通过使用 stack#empty https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html#peek()完全避免这种情况
public void loop() {
Stack<String> stack = new Stack<>();
while (!stack.empty()) stack.peek();
}
public class OwnStack<E> extends Stack<E> {
@Override
public synchronized E peek() {
int len = size();
if (len <= 0) return null;
return elementAt(len - 1);
}
}
如果堆栈由单个线程访问,则应使用Deque
。 它的peek()
方法不仅在空情况下返回null
,而且它也不同步,因此在单线程场景中速度更快。
Deque<T> stack = new ArrayDeque<>();
stack.addFirst(element);
T element = stack.peekFirst();
如果堆栈由多个线程访问,在我看来,实现自己的并发堆栈应该更可取,如果容量固定,则很容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.