Queue、Deque、LinkedList、ArrayDeque关系及方法

队列:Queue(单向队列)

  • 是集合框架Collection的子接口,是一种常见的数据结构,遵循先进先出的原则。基于链表来进行实现单向队列。LinkedList接口,实现了Queue,所以LinkedList,在插入和删除操作,效率会比较高。

方法:

 

add(E):boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则抛出异常。
offer(E):boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则返回false。
remove():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
poll():E 删除队头元素,并返回删除的元素,如果队列为null,返回null。
element():E 获取队头元素,如果队列为null将抛出异常。
peek():E 获取队头元素,如果队列为null将返回null。

Deque接口(双向队列)

Deque接口,是Queue接口的子接口,是指队列两端的元素,既能入队(offer)也能出队。

如果将Deque限制为只能从一端进行入队,和出队,就是栈的数据结构的实现。对于栈而言,有入栈(push)和出栈(pop),遵循先进后出的规则。

方法:

Deque<Integer> deque = new LinkedList<>();

addFirst(E):void 在队头添加元素。
addLast(E):void 在队尾添加元素。
offerFirst(E):boolean 在队头添加元素,并返回是否添加成功。
offerLast(E):boolean 在队尾添加元素,并返回是否添加成功。
removeFirst():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
removeLast():E 删除队尾元素,并返回删除的元素,如果队列为null,抛出异常。
pollFirst():E 删除队头元素,并返回删除的元素,如果队列为null,返回null。
pollLast():E 删除队尾元素,并返回删除的元素,如果队列为null,返回null。
getFirst():E 获取队头元素,如果队列为null将抛出异常。
getLast():E 获取队尾元素,如果队列为null将抛出异常。
peekFirst():E 获取队头元素,如果队列为null将返回null。
peekLast():E 获取队尾元素,如果队列为null将返回null。
removeFirstOccurrence(Object):boolean 删除第一次出现的指定元素,并返回是否删除成功。
removeFirstOccurrence(Object):boolean 删除最后一次出现的指定元素,并返回是否删除成功。

二者的关系:

Deque继承Queue
interface Deque<E> extends Queue<E>
interface Queue<E> extends Collection<E> 

栈 

方法:

peek():E 获取队头元素,如果队列为null将返回null。
push(E):void 栈顶添加一个元素。
pop():E 移除栈顶元素,返回移除的元素,如果栈没有元素抛出异常。

LinkedList:双向链表

LinkedList实现了Deque接口,Deque接口实现了Queue接口

实现接口:List<E>, Deque<E>, Cloneable, java.io.Serializable
拥有队列和列表的方法,取决于创建的是什么

 List的方法:继承自Collection

interface List<E> extends Collection<E>

方法如下:

创建方式:(可以实现双向链表和双端队列)
    LinkedList list = new LinkedList(); //双向链表的创建
    Deque<Integer> deque = new LinkedList<>(); //双端队列的创建
队列方法:
list.add("A");  
list.add("B");  
list.add("C");  
list.add("D");  
list.addFirst("X");  //在头部添加元素
list.addLast("Z");  
System.out.println(list);  
list.removeFirst();  //移除元素
list.removeLast(); 
list.getFirst();  //获取元素
list.getLast(); 
list.isEmpty();

ArrayDeque:通过数组实现队列功能

实现接口:Deque<E>, Cloneable, Serializable
创建方式:ArrayDeque queue = new ArrayDeque();
方法:队列的方法,见上图

底层数据存储方式

类型存储方式
Stack长度为10的数组
ArrayDeque长度为16的数组
LinkedList链表

线程安全

类型线程安全
Stack线程同步、继承于Vector
ArrayDeque线程不同步、实现Deque接口
LinkedList线程不同步、实现Deque与List接口

性能选项

通常情况下,不推荐使用Vector以及其子类Stack

1.需要线程同步 使用Collections工具类中synchronizedXxx()将线程不同步的ArrayDeque以及LinkedList转换成线程同步。

2.频繁的插入、删除操作:LinkedList 3.频繁的随机访问操作:ArrayDeque 4.未知的初始数据量:LinkedList

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值