JAVA集合Stack总结
概要
Stack是栈,在数据结构中就已经知道,栈的属性是先进后出,操作也只有那么几个,一个是进栈,一个是出栈,还有个就是返回栈顶数据。
Stack继承于Vector(矢量队列),由于Vector是基于数组实现的,那么Stack也是基于数组实现,并不是基于链表。
Stack
1 package java.util; 2 3 public 4 class Stack<E> extends Vector<E> { 5 // 版本ID。这个用于版本升级控制,这里不须理会! 6 private static final long serialVersionUID = 1224463164541339165L; 7 8 // 构造函数 9 public Stack() { 10 } 11 12 // push函数:将元素存入栈顶 13 public E push(E item) { 14 // 将元素存入栈顶。 15 // addElement()的实现在Vector.java中 16 addElement(item); 17 18 return item; 19 } 20 21 // pop函数:返回栈顶元素,并将其从栈中删除 22 public synchronized E pop() { 23 E obj; 24 int len = size(); 25 26 obj = peek(); 27 // 删除栈顶元素,removeElementAt()的实现在Vector.java中 28 removeElementAt(len - 1); 29 30 return obj; 31 } 32 33 // peek函数:返回栈顶元素,不执行删除操作 34 public synchronized E peek() { 35 int len = size(); 36 37 if (len == 0) 38 throw new EmptyStackException(); 39 // 返回栈顶元素,elementAt()具体实现在Vector.java中 40 return elementAt(len - 1); 41 } 42 43 // 栈是否为空 44 public boolean empty() { 45 return size() == 0; 46 } 47 48 // 查找“元素o”在栈中的位置:由栈底向栈顶方向数 49 public synchronized int search(Object o) { 50 // 获取元素索引,elementAt()具体实现在Vector.java中 51 int i = lastIndexOf(o); 52 53 if (i >= 0) { 54 return size() - i; 55 } 56 return -1; 57 } 58 }
stack实际上也是通过数组去实现的。执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
Stack继承于Vector,意味着Vector拥有的属性和功能,Stack都拥有。
示例
1 public class JavaSet{ 2 public static void main(String[] args) { 3 Stack<Integer> stack=new Stack<>(); 4 stack.push(12); 5 stack.push(23); 6 System.out.println(stack.peek()); 7 System.out.println(stack.pop()); 8 System.out.println(stack.peek()); 9 } 10 }
23 23 12
Ps:觉得总结得不错,点个赞呗