LinkedList的数据结构
LinkedList的增删改查
增:add
说明:add函数用于向LinkedList中添加一个元素,并且添加到链表尾部。具体添加到尾部的逻辑是由linkLast函数完成的。
举例:
public class Test { public static void main(String[] args) { List<String> list = new LinkedList<>(); list.add("zhangsan"); list.add("lisi"); list.add("wangwu"); list.add("zhangsan"); System.out.println(list); } }
结果:
[zhangsan, lisi, wangwu, zhangsan]
add源码分析:
/** * Appends the specified element to the end of this list. * * <p>This method is equivalent to {@link #addLast}. * * @param e element to be appended to this list * @return {@code true} (as specified by {@link Collection#add}) */ public boolean add(E e) { linkLast(e); return true; }
LinkLast方法如下:
/** * Links e as last element. */ void linkLast(E e) { //将last节点保存 final Node<E> l = last; //构造新节点 final Node<E> newNode = new Node<>(l, e, null); //将新构造的节点赋值给last节点,便于下次添加元素时使用 last = newNode; //判断保存的last节点是否为null if (l == null) //为null,首次添加,first节点与last节点一样,都是新节点 first = newNode; else //不为null,说明list中已有元素,将newNode赋值给未添加元素e之前,list中已经存在的last节点的next属性 l.next = newNode; //size加1 size++; //结构性修改加1 modCount++; }
图示说明添加元素后链表状态的改变:
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
由此可见,双向链表的含义即:由上一个节点的next属性可以得到下一个节点,下一个节点的prev属性可以得到上一个节点。上下两个节点之间互相指向关联。
原文地址:https://www.cnblogs.com/zfyang2429/p/10361250.html
时间: 2024-10-05 20:16:20