package com.jd.testjava.algorithm.datastructure;
/**
* 数组栈
*
* @author lichenyang8
* @date 2019/3/28
*/
public class ArrayStack {
private String[] data;
//表示数组有效元素个数
private int N = 0;
public ArrayStack(int n) {
data = new String[n];
}
public void push(String s) {
//是否扩容
if (data.length == N) {
resize(2 * data.length);
}
data[N++] = s;
}
private void resize(int capacity) {
//1. 创建新数组
String[] copy = new String[capacity];
//2. copy数据
for (int i = 0; i < data.length; i++) {
copy[i] = data[i];
}
//3. 将指针移向新数组
data = copy;
}
public String pop() {
String item = data[--N];
//将游离对象置为null 进行垃圾回收
data[N] = null;
//当数组元素变为1/4时,缩容 避免数组太空 造成内存浪费
if (N > 0 && N == data.length / 4) {
resize(data.length / 2);
}
return item;
}
}
优点: 入栈出栈快
缺点:在入栈时可能需要等待。这时可以选择链表