目录
前言:
栈:
栈的方法:
栈的源码:
队列:
Queue和Deque接口:
队列的一些方法:
Queue源码:
双端队列:
总结:
前言:
栈其实就是吃了吐,后吃的先吐,先吃的后吐。是一种数据结构。
栈:
栈的方法:
这里我们先看关于栈的方法:
栈的源码:
在Java中,栈的底层是数组。
注意,我们要区分数据结构的栈和虚拟机栈。
栈就是数据结构;虚拟机栈是JVM划分的一块内存;栈帧是方法调用时,会在虚拟机中给这个方法开辟一块内存。
队列:
Queue和Deque接口:
Queue是普通队列,Deque是双端队列,注意这里都是接口。
队列的一些方法:
可以发现,Queue是一个接口,不能直接实例化,所以我们要通过向上转型。Queue底层是一个双向链表。
Queue源码:
因为都是继承的接口,所以有很多方法都是类似的,这里我们先观察以下代码:
public class Test2 {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
//因为Queue是接口,不能直接实例化
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue.peek());
System.out.println(queue.poll());//出队
System.out.println(queue);
}
}
双端队列:
双端队列指的是在队列两边都可以进行出队和入队的操作。
public static void main(String[] args) {
//双端队列
Deque<Integer> deque1 = new LinkedList<>();//用双向链表实现
Deque<Integer> deque2 = new ArrayDeque<>();//用循环数组实现
}
这里双端队列既可以双向链表实现又可以用循环数组实现。
这里双端队列就有优势了,不仅可以当做队列,也可以当做栈使用。
总结:
多练就会变强!