LinkedList源码

1.初始化参数
//容量 transient int size = 0; //头节点 transient Node<E> first; //尾节点 transient Node<E> last; //无参构造 public LinkedList() { } //有参构造 public LinkedList(Collection<? extends E> c) { this(); addAll(c); }
2.Node对象
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; } }
3.push方法
public void push(E e) { addFirst(e); } public void addFirst(E e) { linkFirst(e); } private void linkFirst(E e) { //得到头节点 第一次的头节点是null final Node<E> f = first; //创建一个新的节点 final Node<E> newNode = new Node<>(null, e, f); //将新节点设置为 头节点 first = newNode; //判断头节点为null if (f == null) //将新节点设置为尾节点 last = newNode; else //将新节点设置为 原来头节点的头 //也就是 第一次的值是 【null 4 null】 第二次值是 【null 6 4】 会将 【null 4 null】 变为 【6 4 null】 f.prev = newNode; size++; modCount++; }
4.add
add方法是添加尾节点,就是将push反过来了
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; if (l == null) first = newNode; else l.next = newNode; size++; modCount++; }
get方法
public E get(int index) { //验证下标是否正确 checkElementIndex(index); return node(index).item; } //验证下标是否正确 private void checkElementIndex(int index) { if (!isElementIndex(index)) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } Node<E> node(int index) { //二分法查找 //如果输入的 下标小于链表的一半,从左边开始循环查找 if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { //如果输入的下标大于链表的一半,从右边开始循环查找 Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)