java8之LinkedList-add方法

672 阅读1分钟

LinkedList-add

方法说明: 在尾部追加新元素

  • 用例
LinkedList<String> arrList = new LinkedList<>();
arrList.add("zhangsan");
arrList.add("lisi");
System.out.println(arrList.toString());

输出:
[zhangsan, lisi]
  • 源码

public boolean add(E e) {
    linkLast(e);
    return true;
}

void linkLast(E e) {
    final Node<E> l = last; // 获取最后一个元素
    final Node<E> newNode = new Node<>(l, e, null); // 通过构造函数,进行链表的赋值操作
    last = newNode; // 将新的节点,赋值给last,作为下次添加使用
    if (l == null)
        first = newNode; // 添加第一个节点时
    else
        l.next = newNode; // 添加除了第一个节点时
    size++; // 数量+1
    modCount++; // 修改次数+1
}

// 内部静态节点类
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;
    }
}

/*********************关于输出结果分析**********************/
// 类: AbstractCollection
public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder(); 
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}


public abstract Iterator<E> iterator();

// 类: AbstractSequentialList
public Iterator<E> iterator() {
    return listIterator();
}

//  类: AbstractList
public ListIterator<E> listIterator() {
    return listIterator(0);
}

// 类: AbstractList
public ListIterator<E> listIterator(final int index) {
    rangeCheckForAdd(index);

    return new ListItr(index);
}

// 类: LinkedList ,主要用这里的方法获取每个节点下的元素
 private class ListItr implements ListIterator<E> {
public E next() {
        checkForComodification();
        if (!hasNext())
            throw new NoSuchElementException();

        lastReturned = next;
        next = next.next;
        nextIndex++;
        return lastReturned.item;
    }

}