Java中的栈和队列
一.队列
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
JDK中,LinkedList类实现了Queue接口,可以当Queue使用,以下演示队列(Queue)的用法:
import java.util.Arrays; import java.util.Stack; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class demo { // 尽量使用offer()方法添加元素,使用poll()方法移除元素。add()和remove()方法在失败的时候会抛出异常。 public static void main(String[] args) { // 创建队列 Queue<Integer> q = new LinkedList<>(); Queue<String> q1 = new LinkedList<String>(); // 添加元素 q.offer(1); q1.offer("a"); q1.offer("b"); // 输出队列元素 System.out.print("输出队列q1元素: "); for (String s : q1) { System.out.print(s + " "); } System.out.println(); // 查询第一个元素 System.out.println("the first element is: " + q1.element()); System.out.println("the first element is: " + q1.peek()); System.out.print("输出队列q1元素: "); for (String s : q1) { System.out.print(s + " "); } System.out.println(); // 移除第一个元素 q1.poll(); System.out.print("输出队列q1元素: "); for (String s : q1) { System.out.print(s + " "); } } }
offer,add 区别:添加元素
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
poll,remove 区别:移除元素
remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
peek,element区别:查询头部元素
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
总结:尽量使用offer()方法添加元素,使用poll()方法移除元素,使用peek()方法查询头部元素。add()和remove()和element()方法在失败的时候会抛出异常。
二.栈
栈是一种只能在一端进行插入或删除操作的线性表。(先进后出线性表)
Stack<String> staffs =newStack<String>();
java中的Stack继承Vector
import java.util.Stack; public class demo { public static void main(String[] args) { // 创建栈 Stack s = new Stack(); // empty()判断栈是否为空 System.out.println(s.empty()); // push()进栈 s.push(new Integer(1)); s.push(2); // peek()查找栈的顶值 System.out.println(s.peek()); // pop()出栈 s.pop(); System.out.println(s.peek()); } }
- - - - - 2019.12.22