JavaSE-Queue接口与LinkedList类

        在Java中,Queue的实现类LinkedList可以模拟栈与队列以及堆栈结构,给使用者带来了极大的便利。在介绍Queue接口之前,我要先介绍一下LinkedList类。

LinkedList类实现的接口

        首先我们看一段源码

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

        可以看到LinkedList类实现了List<E>,Deque<E>两个接口。除此之外,我们还要知道Queue接口。

先看一下这几个接口的源码

public interface List<E> extends Collection<E>
public interface Deque<E> extends Queue<E>
public interface Queue<E> extends Collection<E>

        首先解释一下Queue接口:JDK1.5以后引入了该接口,主要是为了支持队列的常见操作,我们可以从上面的源码看出Queu接口是java.util.Collection的子接口,Collection接口是JDK1.2引入的,所以Queue接口相当于扩展了Collection接口。

        我们会发现LinkedList类实现的接口有Deque<E>,List<E>,在这里解释一下:List<E>接口是支持栈相关操作的接口。所以我们会发现LinkedList即可以当作队列来使用,也可以当作栈来使用。

        除此之外,如果使用Linkedlist类提供的方法,LinkedList也可以当作双向链表来使用

        Queue<Object> queue = new LinkedList<>();//队列
        List<Object> list = new LinkedList<>();//栈
        LinkedList<Object> linkedList = new LinkedList<>();//双链表

LinkedList实现Queue接口(队列)

import java.util.LinkedList;
import java.util.Queue;

public class Main{
    public static void main(String[] args){
        Queue<Object> queue = new LinkedList<>();//队列
        queue.offer("元素1");//入队列
        queue.offer("元素2");
        queue.offer("元素3");
        queue.offer("元素4");
        System.out.println(queue.poll());//返回队首元素并且删除
        System.out.println(queue.element());//返回队首元素,不删除
        System.out.println(queue);
    }
}

        使用LinkedList实例化Queue接口,实现了队列的常见操作。

LinkedList实现栈

import java.util.LinkedList;

public class Main{
    public static void main(String[] args){
        LinkedList<Object> linkedList= new LinkedList<>();//栈
        linkedList.push(1);
        linkedList.push(2);
        linkedList.push(3);
        linkedList.push(4);
        linkedList.push(5);
        System.out.println(linkedList.peek());//获取栈顶元素,但是不删除元素
        System.out.println(linkedList.poll());//获取栈顶元素并删除
        linkedList.clear();//清栈
        System.out.println(linkedList);
    }
}

        LinkedList的底层其实就是双链表,所以有关链表的实现就不多说了。

        另外,LinkedList是不同步的,如果多个线程同时访问此结构,并且至少有一个线程修改结构,则我们必须在外部进行同步,这里的结构修改指的是添加删除一个或者多个元素的操作,修改元素并不是结构修改。如果存在修改结构的线程,那么应该用Collections.synchronized方法封装。

  

        





猜你喜欢

转载自blog.csdn.net/qq_38449518/article/details/80183932