2 oschina 40151077 oschina_40151077 于 2017.09.08 06:31 提问

网上看到一个Java实现的简单的栈,请问pop方法是怎么弹出栈中的对象的?

import java.util.Arrays;
import java.util.EmptyStackException;

public class MyStack {
private T[] elements;
private int size = 0;

private static final int INIT_CAPACITY = 16;

public MyStack() {
    elements = (T[]) new Object[INIT_CAPACITY];
}

public void push(T elem) {
    ensureCapacity();
    elements[size++] = elem;
}

public T pop() {
    if(size == 0) 
        throw new EmptyStackException();
    return elements[--size];
}

private void ensureCapacity() {
    if(elements.length == size) {
        elements = Arrays.copyOf(elements, 2 * size + 1);
    }
}

}

难道说弹出的意思不是吧栈中的对象删除?

3个回答

caozhy
caozhy   Ds   Rxr 2017.09.08 08:23

删除了啊,因为--size了么。虽然没有真正“清除”这块,但是这个索引上的数据已经不被承认存在了。再push的时候就会冲掉了。
这种做法在计算机中到处可见。比如内存回收,并不需要真的清零,只要把这块内存标记为可用就算回收了。再比如删除文件,并不真的把磁盘恢复到存文件之前的状态,而也是做标记。(所以才可以恢复被删除的文件)

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.08 10:06

“难道说弹出的意思不是吧栈中的对象删除?”

当头向下移动一个,虽然说没直接删除,,但是不管它了也就相当于删除了。
图片说明

有问题还可以追问,,,

zy841958835
zy841958835   Ds   Rxr 2017.09.08 08:21

这个没有删除操作 只是说取下一个值 取完就size-1 再次pop的时候 就是在上次取得基础上再取下一个

Csdn user default icon
上传中...
上传图片
插入图片