1. Stack栈
栈是一种先进后出的数据结构。例如:浏览器的后退、编辑器的撤销、安卓Activity的返回等都属于栈的功能。
在Java集合中提供有Stack
类,这个类是Vector
的子类。需要注意的是,使用这个类的时候,使用的并不是Vector
类中的方法,并且在使用时不要进行向上转型。因为要操作的方法不是由List
定义的,而是由Stack
定义的。
-
Stack
里面的方法有:
① 入栈:public E push(E item)
② 出栈:public synchronized E pop()
③ 观察栈顶元素:public synchronized E peek()
package com.xxx;
import java.util.Stack;
public class TestStack {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("C++");
stack.push("PHP");
System.out.println(stack.peek());//PHP
System.out.println(stack.pop());//PHP
System.out.println(stack.size());//2
System.out.println(stack.peek());//C++
System.out.println(stack.isEmpty());//false
System.out.println(stack.pop());//C++
System.out.println(stack.pop());//Java
//如果栈已经空了,那么再次出栈就会抛出空栈异常,EmptyStackException
// System.out.println(stack.pop());
if (stack.isEmpty()) {
System.out.println("栈空了");
} else {
System.out.println(stack.pop());
}
}
}
2. Queue队列
Stack
是先进后出,与之对应的Queue
是先进先出。
在java.util
包中使用Queue
来实现队列处理操作。Queue
接口继承自Collection
接口,并且有一个子类LinkedList
,要通过 子类实例化对象。
package com.xxx;
import java.util.LinkedList;
import java.util.Queue;
public class TestQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.add("Java");
queue.add("C++");
queue.add("PHP");
System.out.println(queue.size());
System.out.println(queue.isEmpty());
System.out.println(queue.peek());//Java
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
//如果队列为空,继续出队列,返回null
System.out.println(queue.poll());
}
}
- 总结:
①Stack
栈是先进后出,入栈push
,出栈pop
,栈为空时再出栈会出现空栈异常EmptyStackException
,观察栈顶元素peek
。
②Queue
队列是先进先出,入队add
,出队poll
,队列为空时再出队列会返回null
,观察队列顶端元素peek
。
③Stack
是个继承自Vector
类的一个类,而Queue
是个接口,它通过子类LinkedList
实例化对象。