Java Stack(栈)

E push(E item) 
          把项压入堆栈顶部。 
 E pop() 
          移除堆栈顶部的对象,并作为此函数的值返回该对象。 
 E peek() 
          查看堆栈顶部的对象,但不从堆栈中移除它。 
 boolean empty() 
          测试堆栈是否为空。  
 int search(Object o) 
          返回对象在堆栈中的位置,以 1 为基数。

Stack是栈;特点是:先进后出。它通过5个操作对类vector进行扩展,允许将向量视为堆栈。

 它提供了通常的 push 和 pop 操作,以及取栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到栈顶距离的 search 方法。 

import java.util.List;
import java.util.Stack;
 
public class StackTest {
 
	public static void main(String[] args) {
		Stack stack = new Stack();
		stack.push(1);//入栈
		
		System.out.println(stack.isEmpty());//false
		
		stack.pop();//出栈
		System.out.println(stack.isEmpty());//true
		
		stack.push(1);//入栈     int 类型
		stack.push(2l);//入栈     Long类型
		stack.push(3.0);//入栈   double类型
		System.out.println("栈中有: "+stack.size()+" 个元素 。");//栈中有: 3 个元素 。
		
		//栈中可以存放任何类型
		Person p = new Person("xiaoming",20);
		stack.push(p); //入栈  引用对象
		System.out.println("栈中有: "+stack.size()+" 个元素 。");//栈中有: 3 个元素 。
		//System.out.println(stack.get(4)); java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 4
		
		System.out.println(stack.get(3)); // Person [name=xiaoming, age=20]
		System.out.println(stack.peek()); // Person [name=xiaoming, age=20] 取栈顶值(不出栈)
		
		System.out.println(stack.contains(2));//false
		System.out.println(stack.contains(2l));//true
		
		stack.add(2, p); //入栈
		System.out.println(stack.get(2));//Person [name=xiaoming, age=20]
		System.out.println(stack.size());
		
		System.out.println(stack.capacity());// 10
		
		System.out.println(stack.empty());//false 判空
		System.out.println("栈中有: "+stack.size()+" 个元素 。");//栈中有: 5 个元素 。
		
		Stack stack1 = (Stack) stack.clone();//克隆一个栈结构
		System.out.println("克隆的stack1栈中有: "+stack.size()+" 个元素 。");//克隆的stack1栈中有: 5 个元素 。
		System.out.println(stack.equals(stack1));//true
		
		stack.push("你好");
		System.out.println(stack.equals(stack1));//false
		
		System.out.println(stack.elements().toString());//java.util.Vector$1@7852e922
		
		System.out.println("p元素的下标是:"+stack.indexOf(p));//p元素的下标是:2
		
		//stack.forEach();
		
		System.out.println(stack.firstElement());//获取栈底元素
		System.out.println(stack.lastElement());//获取栈顶元素
		
		//stack.insertElementAt(1, "hh");
		//stack.notify();有关线程的操作      Exception in thread "main" java.lang.IllegalMonitorStateException
		
		System.out.println("删除之前有"+stack.size()+"个元素"); //删除之前有6个元素
		stack.remove(3);//删除一个元素
		System.out.println("删除一个元素有"+stack.size()+"个元素");//删除之前有5个元素
		
		System.out.println("之前stack1中有"+stack1.size()+"个元素");
		//stack.removeAll(stack1);
		stack1.removeAll(stack1);  //之前stack1中有5个元素     奇怪的用法!!!!!
		System.out.println("removeAll之后,stack1中有"+stack1.size()+"个元素");//removeAll之后,stack1中有0个元素
		
		System.out.println("改变之前,下表为2的元素值为:"+stack.get(2));//改变之前,下表为2的元素值为:Person [name=xiaoming, age=20]
		stack.set(2, "改变下标为2的元素");
		System.out.println("改变之后,下表为2的元素值为:"+stack.get(2));//改变之后,下表为2的元素值为:改变下标为2的元素
		
		Object[] stackList = stack.toArray();
		for(int i =0;i<stack.size();i++) {
			System.out.print(stackList[i]+",");
		}
		//1,2,改变下标为2的元素,Person [name=xiaoming, age=20],你好,
		
		
	}
 

猜你喜欢

转载自blog.csdn.net/mengxianglong123/article/details/88291361