(1)Java中栈的创建方式
① 使用Stack类
Java提供了最容易根据名字想起的Stack类,这也是在Java 6以及更早版本常用的方式。
Stack<String> stack = new Stack<>(); // 创建一个栈,泛型为String,一般来讲String作为泛型是很安全的 stack.push("AAAI"); stack.push("KDD"); stack.push("SIGIR"); stack.push("WSDM"); System.out.println(stack.pop()); // 输出"WSDM",并将其从栈中移除,表明后进先出 System.out.println(stack.peek()); // 输出"SIGIR",不移除栈顶元素"SIGIR",只查看,也体现后进先出
以下是Stack类中的一类常用方法:
public class Stack<E> extends Vector<E> { public Stack() { // 构造方法 } public E push(E item) { // 往栈中添加元素 addElement(item); return item; } public synchronized E pop() { // 移除栈顶元素, 该方法是线程安全的 E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } public synchronized E peek() { // 查看栈顶元素,该方法是线程安全的 int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } public boolean empty() { // 判断栈空 return size() == 0; } }
②使用Deque接口的实现类来创建栈(推荐使用)
在Java开发中,使用Deque接口的实现类来创建栈是最常用和主流的方式之一。Deque接口根据其名字可知,Deque : double-end queue(双端队列)。众所周知,根据不同的设计方式,队列可以形成栈,栈也可组成队列,故在Deque接口中提供了用来操作队列和栈的方法,并且在其子类中进行了实现。最常用的两个实现类分别是ArrayDeque和LinkedList,第一个表示是使用数组来进行实现的双端队列,可以在两端进行元素的添加和删除操作,并且在数据量比较大的时候仍可以高效的工作。而第二个LinkedList的底层是使用双向链表来实现的,与ArrayDeque相比,它的性能略低,但是它在元素的插入和删除操作方面比较灵活。
这两种的部分用法如下所示:
ArrayDeque(栈)实现类的简单使用:
public void testArrayQue(){ Deque<String> arrQue = new ArrayDeque<>(); arrQue.push("济公"); arrQue.push("李文龙"); arrQue.push("钱掌柜"); arrQue.push("王掌柜"); arrQue.push("李管家"); String pop = arrQue.pop(); System.out.println(pop); // 输出:李管家 String peek = arrQue.peek(); System.out.println(peek); // 输出:王掌柜 System.out.println(Arrays.toString(arrQue.toArray())); // 输出:[王掌柜, 钱掌柜, 李文龙, 济公] }
LinkedList(栈)实现类的简单使用: public void testLinkedList(){ Deque<Integer> linkedQue = new LinkedList<>(); linkedQue.push(123); linkedQue.push(234); linkedQue.push(345); linkedQue.push(456); linkedQue.push(567); Integer pop = linkedQue.pop(); System.out.println(pop); // 输出:567 Integer peek = linkedQue.peek(); System.out.println(peek); // 输出:456 System.out.println(linkedQue); // 输出:[456, 345, 234, 123] }
(2)栈常见的应用场景
① 浏览器的历史记录; ② 缓存的实现;③ activity的启动模式;④ CPU中栈的实现;⑤ word自动保存;⑥ 解析计算式;⑦ 解析xml或json;⑧ 函数调用;⑨ 表达式求值
标签:peek,场景,Java,arrQue,中栈,System,println,linkedQue,push From: https://www.cnblogs.com/fxy0715/p/17378226.html