Stack常用操作push、pop、peek、empty、search
Stack類繼承關(guān)系如圖
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
java.util.Stack<E>
public class Stack<E> extends Vector<E> {}
- push
public E push(E item){
addElement(item);
return item;
}
addElement(item)是Vector類中
- pop
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
- peek
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
4.empty
public boolean empty() {
return size() == 0;
}
測試棧是否為空,和 isEmpty() 用法一致,只是isEmpty()是Vector類中的函數(shù),可以被Stack類繼承調(diào)用
5.search
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
返回對象在堆棧中的位置,以 1 為基數(shù)
測試用例:
public class stackdemo {
public static void main(String []args){
Stack stack = new Stack(); // 創(chuàng)建堆棧對象
String s1 = "element1";
String s2 = "element2";
stack.push(s1); //向 棧中 壓入s1
stack.push(s2); //向 棧中 壓入s2
System.out.println("s1在堆棧的位置為 "+stack.search(s1));
System.out.println("棧頂在堆棧的位置為 "+stack.search(stack.peek()));
System.out.println("棧是否為空 "+stack.empty());
System.out.println(stack.pop()+" 出棧"); //彈出 棧頂元素
System.out.println(stack.pop()+" 出棧");
System.out.println("棧是否為空 "+stack.isEmpty());
}
}
控制臺輸出結(jié)果為
s1在堆棧的位置為 2
棧頂在堆棧的位置為 1
棧是否為空 false
element2 出棧
element1 出棧
棧是否為空 true