Java集合框架之队列Queue

队列是一种先进先出(First In First Out, FIFO)的数据结构。

Queue家族

正在绘制中…

Queue源码

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface Queue<E> extends Collection<E> {
// 在队尾添加元素
boolean add(E e);
boolean offer(E e);

// 删除队首元素
E remove();
E poll();

// 取队首元素的值(不删除)
E element();
E peek();
}

Deque源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public interface Deque<E> extends Queue<E> {
void addFirst(E e);

void addLast(E e);

boolean offerFirst(E e);

boolean offerLast(E e);

E removeFirst();

E removeLast();

E pollFirst();

E pollLast();

E getFirst();

E getLast();

E peekFirst();

E peekLast();

boolean removeFirstOccurrence(Object o);


boolean removeLastOccurrence(Object o);

// *** Queue methods ***

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();


// *** Stack methods ***

void push(E e);

E pop();


// *** Collection methods ***

boolean remove(Object o);

boolean contains(Object o);

public int size();

Iterator<E> iterator();

Iterator<E> descendingIterator();

}

方法比较

抛出异常 返回特殊值
入队(当队列已满时) add将抛出IllegalStateException offer直接返回false
出队(当队列为空时) remove将抛出NoSuchElementException poll返回null
取队首(当队列为空时) element将抛出NoSuchElementException peek返回null

实现类比较

实现类 存储结构 是否允许为null 默认初始容量 扩容机制 是否线程安全
ArrayDeque 数组 不允许 16 2n 非线程安全
LinkedList 双链表 允许 — — 非线程安全
PriorityQueue 堆 不允许 11 n < 64 ? 2n +2: 1.5n 非线程安全
ArrayBlockingQueue 数组 不允许 — — 线程安全
LinkedBlockingQueue 单链表 不允许 2^31 - 1 — 线程安全

----------本文结束感谢您的阅读----------
坚持原创技术分享,您的支持将鼓励我继续创作!