type
status
date
slug
summary
tags
category
icon
在java中,LinkedList可以用来作为栈、队列和双端队列使用,这里简单地来学习一下LinkedList的各种方法。 但是好像就是面试的时候会问问,看很多大厂工作人员的说法好像不怎么用到

1.LinkedList节点的数据结构

LinkedList是双向列表,每一个节点都有一个数据和两个指针分别指向前一个和后一个节点。以下是LinkedList基础数据结构的源码:
画一个图来辅助理解一下:)
notion image

2.LinkedList 作栈来使用

2.1 push()方法

push(E)作为入栈的方法,是在一个栈的头部添加元素
 

2.2 pop()方法

pop()是出栈方法,是取出头部的元素
notion image
 

2.3 peek()方法

peek()方法是查看头部元素的方法,也就是查看栈顶元素的方法

3. LinkedList作队列来使用

3.1 add(E)和offer(E)

offer(E)方法内部调用了add(E),两个方法效果是完全相同的,源码如下:

3.2 peek(E)和element(E)

共同点:peek(E)和element(E)都可以返回队列的头部元素;
区别: 如果头部元素为null, peek(E)会返回null,element(E)会抛出一个 NoSuchElementException异常;
源码如下:

3.3 poll(E)和remove(E)方法

共同点: 都可以返回头部元素,并从队列中删除该元素
区别:当头部元素为null时,remove()方法会抛 NoSuchElementException 异常,poll()方法返回 null
源码如下:

4.LinkedList 作为 双端队列使用

双端队列对应栈和队列的常用方法为:
  • poll() --> pollFirst()和pollLast()
  • offer() --> offerFirst()和offerLast()
  • peek() --> peekFirst()和peekLast()