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;
}
}