目录
Queue接口
- Queue接口Collection子接口,描述数据结构是队列
- Queue存储元素有序
- Queue允许存储重复元素
- Queue不允许存储null元素,LinkedList除外,因为Queue删除操作是以返回一个null值作为标记,标记没有元素存储了,为了避免混淆,不让null存储
boolean | add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 |
E | element() 获取,但是不移除此队列的头。 |
boolean | offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E) ,后者可能无法插入元素,而只是抛出一个异常。 |
E | peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 |
E | poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 |
E | remove() 获取并移除此队列的头 |
注意:
Deque接口
- Deque接口是Queue接口的一个子接口
- 描述的数据结构是双端队列、普通队列、栈
- 有序
- 允许重复元素
- 不允许存储null(LinkedList除外)
ArrayDeque
- ArrayDeque是Deque接口的子实现
- ArrayDeque描述数据结构是普通队列双端队列、栈
- 底层是个数组:循环数组
- 默认的初始容量16,扩容机制2倍-->底层数组长度是2的幂值
- 有序
- 允许存储重复元素
- 不允许存储null
- 线程不安全
- 再给定长度的构造方法里,如果我们给定一个长度是小于等于8的话,底层数组创建一个长度为8的数组,如果给定的值大于等于8,那么这个被创建底层数组长度是大于给定值的最小的2的幂值。-->底层数组长度是2的幂值-->比较方便用位运算取模,计算速度更快(可能吧..)
循环数组优点:不需要在每次删除之后不需要,只需要
BlockingQueue:阻塞队列
什么是快乐星球?什么是阻塞队列?
如果队列大小是一定的,当队列存满的时候添加线程阻塞,当队列为空的时候,删除线程阻塞。