这篇文章展示了如何通过使用数组来实现堆栈。
堆栈的要求是:1)堆栈具有一个接受数字以初始化其大小的构造函数,2)堆栈可以容纳任何类型的元素,3)堆栈具有push()和pop()方法。
一个简单的堆栈实现
publicclassStack {
privateE[] arr = null;
privateintCAP;
privateinttop = -1;
privateintsize = 0;
@SuppressWarnings("unchecked")
publicStack(int cap) {
this.CAP = cap;
this.arr = (E[]) newObject[cap];
}
publicE pop() {
if(this.size == 0){
returnnull;
}
this.size--;
E result = this.arr[top];
this.arr[top] = null;//prevent memory leaking
this.top--;
returnresult;
}
publicbooleanpush(E e) {
if(isFull())
returnfalse;
this.size++;
this.arr[++top] = e;
returntrue;
}
publicbooleanisFull() {
if(this.size == this.CAP)
returnfalse;
returntrue;
}
publicString toString() {
if(this.size==0){
returnnull;
}
StringBuilder sb = newStringBuilder();
for(inti=0; i
sb.append(this.arr[i] + ", ");
}
sb.setLength(sb.length()-2);
returnsb.toString();
}
publicstaticvoidmain(String[] args) {
Stack stack = newStack(11);
stack.push("hello");
stack.push("world");
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
}}
输出:
hello, world
hello
null
此示例在“有效Java”中使用了两次。首先,堆栈示例用于说明内存泄漏。其次,该示例用于说明何时可以抑制未经检查的警告。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。