栈和队列(Stack、Queue)

目录

前言:

栈:

栈的方法:

栈的源码: 

队列:

Queue和Deque接口:

队列的一些方法:

Queue源码:

双端队列: 

总结:


前言:

        栈其实就是吃了吐,后吃的先吐,先吃的后吐。是一种数据结构。栈和队列(Stack、Queue)_第1张图片

栈:

栈的方法:

        这里我们先看关于栈的方法:栈和队列(Stack、Queue)_第2张图片

栈的源码: 

        在Java中,栈的底层是数组。

        注意,我们要区分数据结构的栈和虚拟机栈。

        栈就是数据结构;虚拟机栈是JVM划分的一块内存;栈帧是方法调用时,会在虚拟机中给这个方法开辟一块内存。

队列:

Queue和Deque接口:

        Queue是普通队列,Deque是双端队列,注意这里都是接口。

队列的一些方法:

栈和队列(Stack、Queue)_第3张图片

栈和队列(Stack、Queue)_第4张图片 

         可以发现,Queue是一个接口,不能直接实例化,所以我们要通过向上转型。Queue底层是一个双向链表。

Queue源码:

        因为都是继承的接口,所以有很多方法都是类似的,这里我们先观察以下代码:

public class Test2 {
    public static void main(String[] args) {
        Queue 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);
    }
}

栈和队列(Stack、Queue)_第5张图片

双端队列: 

        双端队列指的是在队列两边都可以进行出队和入队的操作。

public static void main(String[] args) {
    //双端队列
    Deque deque1 = new LinkedList<>();//用双向链表实现
    Deque deque2 = new ArrayDeque<>();//用循环数组实现
}

        这里双端队列既可以双向链表实现又可以用循环数组实现。

        这里双端队列就有优势了,不仅可以当做队列,也可以当做栈使用。

总结:

        多练就会变强!

你可能感兴趣的:(java,开发语言)