public class Stack {
private Object[] elements;
private int size;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack(){
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e){
ensureCapacity();
elements[size++] = e;
}
public Object pop(){
if(size==0){
throw new EmptyStackException();
}
return elements[--size];
}
private void ensureCapacity() {
if (elements.length==size){
elements = Arrays.copyOf(elements,2*size+1);
}
}
}
以上的代码存在内存泄漏,当Stack的size先增大后减小时,一些不用的对象就会常驻内存。 修改后
public Object pop(){
if(size==0){
throw new EmptyStackException();
}
Object result = elements[--size];
elementss[size] = null;
return result;
}