堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它允许元素在一个端点(称为栈顶)进行插入和删除操作。peek()
方法用于查看栈顶的元素而不移除它。
如果堆栈为空,调用 stack.peek()
方法时可能会抛出异常。为了避免这种情况,我们需要重写 peek()
方法,使其在堆栈为空时返回 null
。
以下是使用 Java 语言实现的堆栈类,其中重写了 peek()
方法:
import java.util.EmptyStackException;
public class CustomStack<T> {
private Object[] elements;
private int size;
private static final int DEFAULT_CAPACITY = 10;
public CustomStack() {
this(DEFAULT_CAPACITY);
}
public CustomStack(int capacity) {
elements = new Object[capacity];
size = 0;
}
public void push(T item) {
ensureCapacity();
elements[size++] = item;
}
public T pop() {
if (isEmpty()) {
throw new EmptyStackException();
}
@SuppressWarnings("unchecked")
T item = (T) elements[--size];
elements[size] = null; // 帮助垃圾回收
return item;
}
public T peek() {
if (isEmpty()) {
return null;
}
@SuppressWarnings("unchecked")
T item = (T) elements[size - 1];
return item;
}
public boolean isEmpty() {
return size == 0;
}
private void ensureCapacity() {
if (elements.length == size) {
Object[] newElements = new Object[elements.length * 2];
System.arraycopy(elements, 0, newElements, 0, size);
elements = newElements;
}
}
public static void main(String[] args) {
CustomStack<Integer> stack = new CustomStack<>();
System.out.println(stack.peek()); // 输出 null
stack.push(1);
stack.push(2);
System.out.println(stack.peek()); // 输出 2
stack.pop();
System.out.println(stack.peek()); // 输出 1
stack.pop();
System.out.println(stack.peek()); // 输出 null
}
}
通过这种方式,我们可以确保在堆栈为空时,peek()
方法不会抛出异常,而是返回 null
,从而提高代码的健壮性和可读性。
领取专属 10元无门槛券
手把手带您无忧上云