java 简单实现栈

转自 effective java 第6条。

public class Stack {
    private Object[] elements;
    private int size = 0;

    public Stack(int initialCapacity) {
        this.elements = new Object[initialCapacity];
    }

    public void push(Object e) {
        ensureCapacity();
        elements[size++] = e;
    }

    public Object pop1() { // 内存泄露
        if (size == 0)
            throw new EmptyStackException();
        return elements[--size];
    }

    /**
     * Ensure space for at least one more element, roughly doubling the capacity
     * each time the array needs to grow.
     */
    private void ensureCapacity() {
        if (elements.length == size) {
            Object[] oldElements = elements;
            elements = new Object[2 * elements.length + 1];
            System.arraycopy(oldElements, 0, elements, 0, size);
        }
    }

    //消除内容泄露,只需要改动pop()方法。
    public Object pop() {
        if (size == 0)
            throw new EmptyStackException();
        Object result = elements[--size];
        elements[size] = null;
        return result;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,停车场管理系统可以作为一个进出流量监控的例子。下面是Java实现进出流量监控的步骤: 1.定义一个类,包括的基本操作,如入、出、获取顶元素等。 2.定义一个计数器类,用于记录进出的流量。 3.在入和出操作中,分别调用计数器类的增加和减少方法,记录进出的流量。 4.在需要监控进出流量的地方,调用计数器类的获取流量方法,获取当前的进出流量。 下面是一个简单Java代码示例: ```java public class Stack { private int[] data; private int top; public Stack(int size) { data = new int[size]; top = -1; } public boolean push(int value) { if (top == data.length - 1) { return false; } data[++top] = value; return true; } public int pop() { if (top == -1) { return -1; } return data[top--]; } public int peek() { if (top == -1) { return -1; } return data[top]; } } public class Counter { private int inCount; private int outCount; public void increaseInCount() { inCount++; } public void increaseOutCount() { outCount++; } public int getFlow() { return inCount - outCount; } } // 在入和出操作中调用计数器类的增加和减少方法 public class ParkingLot { private Stack stack; private Counter counter; public ParkingLot(int size) { stack = new Stack(size); counter = new Counter(); } public boolean push(int value) { boolean result = stack.push(value); if (result) { counter.increaseInCount(); } return result; } public int pop() { int result = stack.pop(); if (result ! -1) { counter.increaseOutCount(); } return result; } public int getFlow() { return counter.getFlow(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值