2-3 LinkedList(2021-11-4)
1 说明
- LinkedList底层实现了双向链表和双向队列特点。
- 可以添加任何元素(可重复,可null)。
- 线程不安全,没有实现同步。
- 属性:
- size(链表中元素)
- first(指向 维护的链表(数据)的第一个元素)
- last(指向 维护的链表 最后)
- 每个节点(Node对象),里面又维护了prev,next。
2 源码
- 无参构造:
public LinkedList() { //size = 0
}
- add:
public boolean add(E e) {
linkLast(e){ //把对象挂到尾巴上!
final Node<E> l = last; // l ——> null
final Node<E> newNode = new Node<>(l, e, null); // first——>null , item , null
last = newNode; // last ——> newNode
if (l == null)
first = newNode; // first——>newNode
else
l.next = newNode;
size++; //长度+1
modCount++;
};]
return true;
}
newNode(pre) ——> l
last ——> newNode
l.next ——> newNode
remove():这里默认删除的是第一个结点。
public E remove() {
return removeFirst(){//删除第一个结点
final Node<E> f = first; //指向第一个结点
if (f == null) //防止空
throw new NoSuchElementException();
return unlinkFirst(f){ //真正拿掉第一个结点的代码!!!!!!!!!!!!
// assert f == first && f != null;
final E element = f.item; //取出内容
final Node<E> next = f.next; //指向第二个结点
f.item = null; //置空
f.next = null; // help GC
first = next; //指向第二个结点
if (next == null)
last = null;
else
next.prev = null;
size--;
modCount++;
return element;
};
};
}