【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
以下有个面试题,改程序设计上有什么问题?给出解决方案!
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_SIZE = 16;
public Stack() {
elements = new Object[DEFAULT_SIZE];
}
public void push(Object e){
refreshElements();
elements[size++] = e;
}
private void refreshElements() {
if(size >= elements.length){
elements = Arrays.copyOf(elements, elements.length*2+1);
}
}
public Object pop() throws Exception{
if(size==0){
throw new Exception();
}
return elements[--size];
}
}
本程序想到了 push 场合,数组 elements 的容量(elements.length)不够时,增加容量。 可是,为了时刻节约资源,还要考虑 pop 场合,当数组下标 size 降到 elements 容量的一半以下的时候,应当实行将elements 容量(elements.lenmgth)减半的操作。为此, 添加一个 reduceElements()方法。这样每逢 pop之前,先调用 reduceElements() 方法,以时刻监视 size 的现状,若低于当前容量的一半,应当将容量减半。
改动如下:
既然是入栈出栈,为何不用链表结构?