1.LinkedList底层
LinkedList底层是通过链表实现的,链表中的一个节点是一个Node类型的数据结构,其保存了一个指向前驱节点的引用、真实数据和一个指向后继节点的引用;
特点是随机访问效率低,删除和插入快;
可以当作栈,队列和双端队列来使用;
非线程安全,如果要创建一个线程安全的LinkedList,则可以用
Collections.synchronizedList(new LinkedList(…))
实现Serializable接口,因此它支持序列化,能够通过序列化传输,实现Cloneable接口,能被克隆
LinkedList可以存放任何元素,包括null;
LinkedList是按双向链表查找的,如果用get(index)方法访问,计算index与size/2值的相对大小来决定是从头或者从后开始查找;
2. LinkedList中所有的调用方法
增加:
add(E e):在尾部插入元素
addFirst(E e):在头部插入
addLast(E e):在尾部添加元素
push:与addFirst一致
offer(E e):在尾部添加
offerFirst():在头部添加
offerLast():在尾部添加
删除:
poll():头部删除
pollFirst():删除头
pollLast():删除尾
pop();删除头
remove();删除链表中第一个元素
remove(E e):移除
removeFirst(E e):删除头元素
removeLast(E e):移除尾元素
修改:
set(int index,E element)
获取:
get(int index)
getFirst()
getLast():
peek()
peekFirst()
peekLast()
indexOf(Object o):返回第一次出现的位置,如果不存在则返回-1
lastIndexOf(Object o):返回元素最后一次出现的位置,如果不存在则返回-1
contains(Object o):
clear();
遍历:
for循环
增强for循环
iterator()
listIterator()
注意:
add与offer在尾部插入元素时,若超出队列界限的时候,前者会抛出异常,而后者会返回false;remove与poll在用空集合调用时不是抛出异常,前者抛出异常,后者返回null;peek与element用于队列的头部查询元素,当队列为空时,前者返回null,后者抛出异常
3.使用LinkedList实现Deque和Queue接口
Deque接口(双向队列)
Deque继承Queue,Deque有3个子类,分别是LinkedList,PriorityQueue,ArrayDeque
Queue接口(单向队列)