- LinkedList底层是一个双向链表,他维护了两个属性fist和last分别指向首节点和尾节点,每个节点(Node对象)中又维护的prev、next、item三个属性,通过prev指向前一个节点,next指向后一个节点,item就是具体的值
- 当使用无参构造器去构造LinkedList集合时,其实只是做了一个初始化,并没有其他作用。而当使用有参构造器去构造LinkedList,它只有一个参数,参数类型是集合类。有参构造方法调用了无参构造方法,并调用了addAll方法。addAll方法的主要作用是:将指定集合的所有元素添加到当前列表的尾部,按照指定集合的顺序插入,如果在操作正在进行时修改指定的集合,则此操作的行为是不确定的。此处说明了LinkedList不是线程安全的。
public LinkedList() {
this.size = 0;
}
public LinkedList(Collection<? extends E> var1) {
this();
this.addAll(var1);
}
- 当调用add方法向LinkedList中添加元素(任意值)时,会判断fist和last属性值应该指向的节点并赋值,随后创建一个新的Node对象用item属性存放新添加的值,以及更新当前节点的prev和next属性。由于add()方法是将值添加在链表末尾,所以原有链表最后一个节点的next属性会指向新节点。
private void linkFirst(E var1) {
LinkedList.Node var2 = this.first;
LinkedList.Node var3 = new LinkedList.Node((LinkedList.Node)null, var1, var2);
this.first = var3;
if (var2 == null) {
this.last = var3;
} else {
var2.prev = var3;
}
++this.size;
++this.modCount;
- LinkedList添加以及删除元素效率很快,因为只需要改变节点的prev和next属性的指向即可