java学习笔记——自定义实现Stack集合
public class MyStack<E> {private Object[] elements; // 声明一个object类型的数组private int size; // 数组中实际的元素个数public MyStack() {elements = new Object[10]; // 初始长度为10}// 检查堆栈是否为空public boolean empty() {return size == 0; // 元素个数为0返回true,否则返回false。}// 查看堆栈顶部的对象public E peek() {//如果没有元素返回nullif (empty()) {return null; }//如果有元素就返回最后一个return (E) elements[size - 1];}// 移除堆栈顶部的对象public E pop() {E e = peek(); //拿到最后一个元素的备份elements[size - 1] = null; //给数组最后一个元素赋null值size--; //元素个数减1return e; }// 把项压入堆栈顶部。public E push(E item) {ensureCapacity(size + 1); //检查容量elements[size++] = item; //保存传进来的元素,元素个数自增1return item;}// 检查容量是否足够,不够再原有的数组基础创建新的数组private void ensureCapacity(int size) {int len = elements.length; //获得数组现在的长度if (size > len) {int newLen = (len * 3) / 2 + 1; //每次数组扩充的容量elements = Arrays.copyOf(elements, newLen);}}// 返回对象在堆栈中的位置,以 1 为基数public int search(Object o) {int index = lastIndexOf(o); //得到元素在数组里的下标return index == -1 ? index : size - index; }// 查找下标的方法private int lastIndexOf(Object o) {if (empty()) {throw new EmptyStackException(); //如果数组为空,就抛出一个自定义异常}//当传进来的元素为空时if (o == null) {for (int i = size - 1; i >= 0; i--) {if (elements[i] == null) {return i;}}//不为空时} else {for (int i = size - 1; i >= 0; i--) {if (o.equals(elements[i])) {return i;}}}return -1; // 没有找到,返回-1}// 自定义异常private static class EmptyStackException extends RuntimeException {public EmptyStackException() {super("堆栈为空");}}}