Java 中的栈与队列
- 实现队列,采用 LinkedList 类
- 实现栈,采用 java.util.Stack 类
- 优先级队列,采用 PriorityQueue 类
- LRU cache,采用 LinkedHashMap,参考:https://www.cnblogs.com/hapjin/p/17576261.html
- key 有序的 Map,https://www.cnblogs.com/hapjin/p/17541911.html
public class Main {
public static void main(String[] args) {
//创建队列
Queue<String> queue = new LinkedList<>();
queue.offer("a");//入队列
queue.offer("b");
String peek = queue.peek();//取队列第一个元素
System.out.println("peek=" + peek);//peek=a
String a = queue.poll();//出队列
System.out.println("a=" + a);//a
//创建栈
Stack<String> stack = new Stack<>();
System.out.println(stack.push("a"));//a
System.out.println(stack.push("b"));//b
System.out.println(stack.peek());//获取栈顶元素 b
System.out.println(stack.pop());//出栈 b
//大顶堆,也可以使用 Comparator 自定义元素的比较顺序。
// PriorityQueue<String> pq = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<String> pq = new PriorityQueue<>();//从小到大,小顶堆
System.out.println(pq.offer("b"));//true
System.out.println(pq.offer("a"));//true
System.out.println(pq.peek());//a, 小顶堆, 堆顶是 a
System.out.println(pq.poll());//a, 出队列
System.out.println(pq.peek());//b
}
}
LinkedList 也可以作为栈来使用,创建栈时必须定义成 LinkedList 类型,示例如下:
LinkedList<String> mystack = new LinkedList<>();
mystack.push("a");
mystack.push("b");
System.out.println(mystack.peek());//b
System.out.println(mystack.pop());//b