add
和remove
是一对,源自Collection
offer
和poll
是一对,源自Queue
push
和pop
是一对,源自Deque
,其本质是栈(Stack
类由于某些历史原因,官方已不建议使用,使用Deque
代替)
offerFirst/offerLast
和pollFirst/pollLast
是一对,源自Deque
,其本质是双端队列
继承关系
Iterable
-> Collection
-> Queue
-> Deque
-> LinkedList
不同之处
add/remove
源自集合,所以添加到队尾,从队头删除;
offer/poll
源自队列(先进先出 => 尾进头出),所以添加到队尾,从队头删除;
push/pop
源自栈(先进后出 => 头进头出),所以添加到队头,从队头删除;
offerFirst/offerLast/pollFirst/pollLast
源自双端队列(两端都可以进也都可以出),根据字面意思,offerFirst
添加到队头,offerLast
添加到队尾,pollFirst
从队头删除,pollLast
从队尾删除。
总结
add/offer/offerLast
添加队尾,三个方法等价;
push/offerFirst
添加队头,两个方法等价。
remove/pop/poll/pollFirst
删除队头,四个方法等价;
pollLast
删除队尾。
用法
虽说某几个方法等价,但是我们在使用的时候,建议根据用途来使用不同的方法
比如你想把LinkedList
当做集合list
,那么应该用add/remove
,
如果想用作队列,则使用offer/poll
,如果用作栈,则使用push/pop
,
如果用作双端队列,则使用offerFirst/offerLast/pollFirst/pollLast
。
根据语义使用,就不会发生:我想删队尾,结果删了队头这种事了。