Java基础之LinkedList知识点总结
一.LinkedList的使用
初始化
new LinkedList<E>()
new LinkedList<E>(Collection <? extends E>)
两种初始化方法,第二种可以利用其它Collection初始化。
作为队列使用
- offer() 往队里添加元素
- poll() 获取并删除队列头的元素
- peek() 获取队列头的元素,但不删除
作为栈使用
- push() 往栈中添加元素
- pop() 弹出栈中的元素
- peek() 获取栈顶元素,但不弹出
二.LinkedList的底层数据结构
LinkedList的底层数据结构是链表。它的基本元素是一个自己实现的Node类:
private static class Node<E> {
E item; //节点保存的实际元素
Node<E> next; //下一个节点
Node<E> prev; //前一个节点
//构造方法
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
在LinkedList中,维护了链表的第一个节点first、最后一个节点last和当前链表的长度size这三个基本信息。从Node的源码可以看出,它有next、prev两个指针。而实际上LinkedList的构成就是一个双向链表。
三.LinkedList源码中的基本方法
封装了一些对链表进行基本操作的方法,如在头部添加、在头部删除、在尾部添加、在尾部删除、删除某个指定节点等,基于此再实现add(),remove()等方法供外部调用。
四.LinkedList的序列化和饭序列化
与ArrayList类似,LinkedList也实现了自己的readObject和writeObject方法,来支持序列化和反序列化。
五.克隆
LinkedList实现了cloneable接口,重写了clone()方法来实现了拷贝。LinkedList实现的是浅拷贝,即对拷贝对象的改变会影响被拷贝对象。
六.转换为数组
与ArrayList类似,使用toArray(T[] a)可转换为指定类型的数组
七.迭代器
LinkedList实现了比Iterator更为强大的ListIterator迭代器,不仅可以从前往后遍历还可以在遍历过程中倒退,访问之前的元素。
-
hasNext() 是否有下一个元素
-
next() 获取下一个
-
hasPrevious() 是否有前一个元素
-
previous() 获取前一个元素
-
remove()删除刚刚next或previous得到的元素;在调用之前必须先调用一次next或previous
-
public ListIterator<E> listIterator(int index) 获取一个ListIterator,index为开始位置,要求index >=0且<=size