Java使用数组实现栈

看到了一个面试题,使用数组创建一个栈。
所以亲自动手实现了一个,没有查资料,按照自己的想法去实现的,若存在不合理或者错误的地方,欢迎指出,谢谢!
栈的特性:先进后出
栈的方法:
Java使用数组实现栈_第1张图片
优点:指定泛型存储(任意类型)
启发:ArrayList源码
测试:本地测试所有方法均正确

代码:

class MyStack<T> {
    private int DEFAULT_CAP = 10;// 默认容量
    private int size = 0;

    transient Object[] obj = null;

    /**
     * @param DEFAULT_CAP - 容量
     */
    public MyStack(int DEFAULT_CAP) {
        this.DEFAULT_CAP = DEFAULT_CAP;
    }

    public MyStack() {
    }

    /**
     * 添加元素
     * @param t - 元素
     */
    public void push(T t) {
        resize(size);
        obj[size++] = t;
    }

    /**
     * 扩容
     * @param size - 当前元素个数
     */
    private void resize(int size) {
        /**
         * 第一次添加元素
         */
        if (obj == null) {
            obj = new Object[DEFAULT_CAP];
            return;
        }

        /**
         * 元素个数超过数组大小
         */
        if (size >= obj.length) {
            int newlength = obj.length + (obj.length >> 1);// 扩容空间为原来数组的一半
            obj = Arrays.copyOf(obj, newlength);
        }
    }

    /**
     * 弹出元素
     * @return
     * @throws Exception
     */
    public T pop() throws Exception {
        if (size == 0) {
            throw new Exception("栈为空");
        }
        T t = (T) obj[--size];
        return t;
    }

    /**
     * 查看栈顶元素
     * @return
     * @throws Exception
     */
    public T peek() throws Exception {
        if (size == 0) {
            throw new Exception("栈为空");
        }
        T t = (T) obj[size - 1];
        return t;
    }

    /**
     * 判断栈是否为空
     * @return
     */
    public boolean empty() {
        return size == 0;
    }
}

你可能感兴趣的:(java,java)