Java LinkedList集合用法详解
LinkedList 是 Java 里常用的线性列表集合,内部维护了一个双向链表。
LinkedList 集合中的每个数据节点都有两个指针,分别指向前一个节点和后一个节点。当插入一个新节点时,只需要修改元素之间的这种引用关系,删除一个节点也是如此。所以,LinkedList 集合对于元素的增、删操作快捷方便。
但是 LinkedList 集合不支持随机取值,每次都只能从一端或双向链表中的某个节点开始遍历,直到找到查询的对象再返回,由于无法保存上一次的查询位置,因此实现查询操作的效率低下。
定义 LinkedList 类的语法格式如下:
LinkedList 类常用的方法如表 1 所示。
【实例】LinkedList 集合的应用。
LinkedList 集合中的每个数据节点都有两个指针,分别指向前一个节点和后一个节点。当插入一个新节点时,只需要修改元素之间的这种引用关系,删除一个节点也是如此。所以,LinkedList 集合对于元素的增、删操作快捷方便。
但是 LinkedList 集合不支持随机取值,每次都只能从一端或双向链表中的某个节点开始遍历,直到找到查询的对象再返回,由于无法保存上一次的查询位置,因此实现查询操作的效率低下。
定义 LinkedList 类的语法格式如下:
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable由此可以看出,LinkedList 类还实现了 Deque 接口,可以被当成双端队列来使用。因此,LinkedList 类既可以被当成“栈”使用,也可以被当成队列使用。
LinkedList 类常用的方法如表 1 所示。
方法声明 | 功能描述 |
---|---|
boolean add(E e) | 将指定元素追加到此列表的末尾 |
void add(int index, E element) | 在此列表中的指定位置插入指定元素 |
boolean addAll(Collectionc) | 按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾 |
boolean addAll(int index, Collectionc) | 将指定集合中的所有元素插入此列表中,从指定位置开始 |
void addFirst(E e) | 在此列表的开头插入指定元素 |
void addLast(E e) | 将指定元素追加到此列表的末尾 |
void clear() | 从列表中删除所有元素 |
E getFirst() | 返回此列表中的第一个元素 |
E getLast() | 返回此列表中的最后一个元素 |
int indexOf(Object o) | 返回此列表中指定元素第一次出现的索引,若此列表不包含该元素,则返回-1 |
boolean offerFirst(E e) | 在此列表的前面插入指定元素 |
boolean offerLast(E e) | 在此列表的末尾插入指定元素 |
E peekFirst() | 检索但不删除此列表中的第一个元素,若此列表为空,则返回 null |
E peekLast() | 检索但不删除此列表中的最后一个元素,若此列表为空,则返回 null |
E pollFirst() | 检索并删除此列表中的第一个元素,若此列表为空,则返回 null |
E pollLast() | 检索并删除此列表中的最后一个元素,如果此列表为空,则返回 null |
E pop() | 从此列表表示的堆栈中弹出栈顶元素 |
void push(E e) | 将元素推送到由此列表表示的堆栈上,即元素 e 入栈 |
E remove() | 检索并删除此列表的头(第一个元素) |
E remove(int index) | 删除此列表中指定位置的元素 |
E removeFirst() | 从此列表中删除并返回第一个元素 |
E removeLast() | 从此列表中删除并返回最后一个元素 |
【实例】LinkedList 集合的应用。
import java.util.LinkedList; public class Demo { public static void main(String[] args) { // 创建一个 LinkedList 对象 LinkedList mylink = new LinkedList(); // 将字符串元素加到队列尾部 mylink.offer("张三"); // 将字符串元素加到栈顶 mylink.push("李四"); // 将字符串加到队列头部(相当于栈顶) mylink.offerFirst("王五"); System.out.println("遍历集合中的元素:"); for (int i = 0; i < mylink.size(); i++) { System.out.println(mylink.get(i)); } System.out.println("使用 foreach 语句遍历"); for (Object e : mylink) { System.out.println(e); } System.out.println("--------------"); System.out.println("访问并不删除栈顶元素:"); System.out.println(mylink.peekFirst()); System.out.println("访问并不删除队列中的最后一个元素:"); System.out.println(mylink.peekLast()); System.out.println("将栈顶元素从栈中弹出: "); System.out.println(mylink.pop()); System.out.println("集合中的元素有: "); System.out.println(mylink); System.out.println("访问并删除队列中的最后一个元素: "); System.out.println(mylink.pollLast()); System.out.println("集合中的元素有: "); System.out.println(mylink); } }运行结果为:
遍历集合中的元素:
王五
李四
张三
使用 foreach 语句遍历
王五
李四
张三
--------------
访问并不删除栈顶元素:
王五
访问并不删除队列中的最后一个元素:
张三
将栈顶元素从栈中弹出:
王五
集合中的元素有:
[李四, 张三]
访问并删除队列中的最后一个元素:
张三
集合中的元素有:
[李四]