1.LinkedList特点
1.1 LinkedList底层实现双向链表和双端队列
LinkedList中维护两个属性first和last,分别指向首节点和尾节点
每个节点(Node对象),里面维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表。
1.2 可添加任意元素,包括null
1.3 线程不安全,没有实现同步
2. CRUD增删改查
C creat
R read
U update
D delete
2.1 添加第一个元素
LinkedList linkedList = new LinkedList();
public LinkedList() {}
2. 这时linkedList的属性 first = null, last = null
3. 执行添加
public boolean add(E e) {
linkLast(e);
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
//Node (pre, element, next)
last = newNone;
if (l == null)
first = newNone;
else
l.next = newNode;
size++;
modCount++;
}
如果是添加第一个节点,则last = null,first和last都将指向newNode
如果非第一个节点,则,last指向新节点
4.删除
remove();
//删除第一个节点
remove(int index);
//删除索引节点
remove(Object o);
//删除对象节点
removeFirst();
//删除第一个节点
删除操作中的函数嵌套
remove() {
removeFirst(){
unlinkFirst()//真正实现删除的函数
}
}
5.ArrayList和LinkedList比较
ArrayList查改操作方便(随机访问),LinkedList增删操作方便(顺序访问)。程序中大部分使用的是查询操作,因此大部分情况下会选择ArrayList.
5.1 线程安全问题:ArrayList和LinkedList是线程不安全的,单线程或者不涉及并发的程序中可以使用。
6.