04_Queue

在这里插入图片描述

Queue

特点

  • Queue是Collection的子接口
  • 数据结构表现为:队列
  • 存储元素有序
  • 存储元素可重复
  • 不能存储null除了LinkedList子实现

Queue的API

boolean add(E e): 
// 将指定的元素插入此队列(如果立即可行且不会违反容量限制)
// 在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。

E element() : // 获取,但是不移除此队列的头。
// 如果队列为空则会抛出异常:NoSuchElementException

E remove(): // 获取并移除此队列的头。
// 没有元素的时候会抛出异常:NoSuchElementException 

boolean offer(E e):
// 将指定的元素插入此队列(如果立即可行且不会违反容量限制)
// 当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
// offer的返回值:true表示添加成功;false表示添加失败

E peek(): // 获取但不移除此队列的头;
// 如果此队列为空,则返回 null。

E poll(): // 获取并移除此队列的头
// 如果此队列为空,则返回 null。
抛出异常返回特殊值
增加元素add(e)offer(e)
移除元素remove()poll()
查看元素element()peek()

特殊情况

  • 添加的时候,队列满了
  • 删除的时候,队列空了

Deque

双端队列。可以从两端进出的线性表。

特点

  • Deque是Queue的子接口
  • 数据结构表现:队列,栈,双端队列
  • 存储元素有序
  • 可存储重复元素
  • 不能存储null(LinkedList除外)

Deque的API

作为Queue的API(增、删、查)

E peek(); // 获取队头元素,但不移除它

E poll() // 从队头移除元素

boolean offer(E e);  // 添加一个元素到队尾

作为Stack的API

E pop();  // 从此列表所表示的堆栈处弹出一个元素

void push(E e); // 将元素推入此列表所表示的堆栈。

作为双端队列的API

boolean offerFirst(E e)// 从第一个位置插入指定元素

boolean offerLast(E e)// 从最后一个位置插入指定元素

E peekFirst()// 获取但是不移除第一个元素,如果列表为空,返回null

E peekLast()// 获取但是不移除最后一个元素,如果列表为空,返回null

E pollFirst()// 从第一个位置移除元素

E pollLast()// 从最后一个位置移除元素,如果列表为空,返回null

使用deque去模拟双端队列的两种方式

  • 从队尾进,从队头出
  • 从队头进,从队尾出

作为普通List的API

boolean add(E e): // 将指定元素添加到此列表的结尾。

E remove()// 获取并移除此列表的头(第一个元素)。

void addFirst(E e): // 将指定元素插入此列表的开头。

void addLast(E e):  // 将指定元素添加到此列表的结尾。

E getFirst()// 返回此列表的第一个元素。

E getLast(): // 返回此列表的最后一个元素。

E removeFirst(): // 移除并返回此列表的第一个元素。

E removeLast()// 移除并返回此列表的最后一个元素。

boolean removeFirstOccurrence(Object o)// 从此列表中移除第一次出现的指定元素

boolean removeLastOccurrence(Object o)// 从列表中移除最后一次出现的指定元素

Iterator<E> descendingIterator()// 获取一个倒序的迭代器

E element()// 获取元素
第一个元素(头部)第一个元素(头部)最后一个元素(尾部)最后一个元素(尾部)
抛出异常特殊值抛出异常特殊值
插入addFirst(e)offerFirst(e)addLast(e)offerLast(e)
移除removeFirst()pollFirst()removeLast()pollLast()
获取getFirst()peekFirst()getLast()peekLast()
Queue 方法等效 Deque 方法
add(e)addLast(e)
offer(e)offerLast(e)
remove()removeFirst()
poll()pollFirst()
element()getFirst()
peek()peekFirst()

ArrayDeque

特点

  • ArrayDeque是Deque的子实现
  • 数据结构表现:队列双端队列
  • 底层实现循环数组
  • 存储元素有序
  • 存储元素可重复
  • 不可存储null

ArrayDeque的构造方法:

在这里插入图片描述

容量问题
如果传入的初始化容量小于8,则直接分配8个空间,如果传入的数字大于8,则直接找到大于8的最近一个2的幂次方。
为什么要分配2的幂次方
方便进行取模操作。(注:a % b = a & (b-1)


BlockingQueue

阻塞队列:一个大小有限的队列

  • 插入时,当队列满了,插入线程阻塞住

  • 从队列中获取元素时,当队列空了,获取线程阻塞住

抛出异常特殊值阻塞超时
插入add(e)offer(e)put(e)offer(e, time, unit)
移除remove()poll()take()poll(time, unit)
检查element()take()--

可以用BlockingQueue进行生产者-消费者问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coo1heisenberg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值