自定义栈

来源:互联网 发布:知柏地黄丸成分 编辑:程序博客网 时间:2024/05/02 02:40
<pre name="code" class="java"><pre name="code" class="java">public interface IStack {/** * 判断栈是否为空 */boolean isEmpty();/** * 清空栈 */void clear();/** * 栈的长度 */int length();/** * 数据入栈 */boolean push(Object data);/** * 数据出栈 */Object pop();/** * 获取栈顶数据 */Object getTop();}


public class StackImp implements IStack {private Object[] objs = new Object[16];private int size = 0;@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic void clear() {// 将数组中的数据置为null, 方便GC进行回收for (int i = 0; i < size; i++) {objs[size] = null;}size = 0;}@Overridepublic int length() {return size;}@Overridepublic boolean push(Object data) {// 判断是否需要进行数组扩容if (size >= objs.length) {resize();}objs[size++] = data;return true;}/** * 数组扩容 */private void resize() {Object[] temp = new Object[objs.length * 3 / 2 + 1];for (int i = 0; i < size; i++) {temp[i] = objs[i];objs[i] = null;}objs = temp;}@SuppressWarnings("unchecked")@Overridepublic Object pop() {if (size == 0) {return null;}return (Object) objs[--size];}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("MyArrayStack: [");for (int i = 0; i < size; i++) {sb.append(objs[i].toString());if (i != size - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}@Overridepublic Object getTop() {// TODO Auto-generated method stubreturn objs[size - 1];}}



0 0
原创粉丝点击