LinkedList源代码阅读

 

 

 由此可见,该类最终都实现了Collection和list接口,所以LinkedList行为都受到了Collection和list接口的约束

 

上述这两个方法都是指LinkedList的构造方法有两种形式,用于在创建对象时使用,一种形式为有参构造,一种形式为无参构造,有参构造中 (Collection<? extends E> c )
?是“任意类”的意思,E是指定类型,是泛型;
通常出现在将一个集合赋值给另一个集合的情景中,如:public LinkedList(Collection<? extends E> c )、addAll(Collection<? extends E> c);

 

 

Node 是 LInkedList 的内部类,定义了存储的数据元素,前一个节点和后一个节点,典型的双链表结构。

功能:头插法,向链表中插入元素e
源码思路:
(1)定义一个Node类型的变量f,指向链表的第一个结点。
(2)定义一个新的Node类型的变量newNode,通过Node类的带参数构造函数将插入的元素的值放在变量中,因为头插法,所以新结点的prev域为null
(3)更改第一个结点的值,将newNode的值赋给成员变量first
(4)如果f(链表的第一个结点)是null,那么最后一个结点也是newNode,否则将f的prev域指向newNode
(5)更改size的大小和modCount的大小

 

功能:将链表的第一个元素取出,并将该结点从链表中删除

 

 功能: 从链表中删除结点x,该方法主要是为了其他方法提供服务的。

 

 

  • 功能:获取链表的最前和最后一个结点值

runtimeException



功能:删除节点值(首尾结点)

 

 

源码解析:

功能:向链表中插入集合元素
源码思路:
(1) 首先调用checkPositionIndex方法来判断index下标是否符合范围
(2)定义一个Object类型的数组a,将集合c通过调用toArray方法变成数组,定义一个int类型的numNew变量,用来存储数组a的长度
(3) 如果数组的长度为0,说明链表中没有元素,则返回false
(4) 定义两个Node类型的变量pred(存储前驱结点)和succ(存储后继结点)
(5) 如果index的值等于size,说明链表已经存满了,将succ设置为null,将pred设置为last链表最后一个结点
(6) 通过增强for循环遍历数组a,定于一个Node类型的新变量newNode,通过Node构造函数,设置每个遍历元素的值,如果pred前驱的值为null,则说明该结点是链表的第一个结点,否则设置pred的next域为newNode
(7) 如果succ的值为null,说明链表中没有元素,否则将链表的后两个元素链接在一起。
(8) 更改链表的size值,更改modCount的值

 

 

  • 功能: 通过index索引获取链表中结点的值

 

 

  • 功能:通过index索引,来修改链表中索引值为index的元素值

 

 

  • 功能:通过index索引,向链表中索引值为index的位置添加元素element

 

 

源码解析:

功能:从链表头开始遍历,返回指定结点的索引值
源码思路:
(1)定义一个变量index,用来存储元素的索引值
(2)如果指定结点为null,则for循环直到找到链表中为空的结点,返回结点的下标,否则index值自加
(3)如果指定结点不为null,则for循环直到找到链表中结点值等于指定结点的值,返回结点的下标,否则index值自加

  •  方法删除此列表中最后一次出现的指定元素

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值