ArrayList与LinekdList源码解析

今天看下简单集合ArrayList与LinkedList的源码  并分析其擅长和不擅长的操作。。

ArrayList与LinekdList源码解析_第1张图片

上图是ArrayList的成员变量  主要变量elementData 是底层数组的体现 ,还有一些初始化数组的成员变量 在list为空的时候进行初始化使用。

ArrayList与LinekdList源码解析_第2张图片

构造函数基本是判断如果为空就初始化 否则将参数带进去创建。

ArrayList与LinekdList源码解析_第3张图片

ArrayList与LinekdList源码解析_第4张图片

这两个图是插入元素的操作 比较简单 就是直接将元素按顺序放入数组,再加长数组长度。

ArrayList与LinekdList源码解析_第5张图片

删除的方法如果参数是下标 先删除 将新的数组赋值 并将旧值返回。

ArrayList与LinekdList源码解析_第6张图片

如果参数是对象 那么就要先遍历找到第一个与参数相等的值,将其下标取出并调用上面参数为下标的删除方法。

查询不言而喻  数组下表确定 查找的速度会非常快。

另外还有一些批量删除的方法,就不在贴了 有兴趣的可以自己去看一下。

ArrayList与LinekdList源码解析_第7张图片

当添加结点的时候,首先判断下是不是空的链表 ,尾结点如果为空 说明是空的因为如果不为空一点会有尾结点,然后相应的处理是头结点指向这个传进来的结点,即将空链表加入一个结点。此时的头结点是有的、

链表详细见:https://blog.csdn.net/m0_37884977/article/details/80467658

你可能感兴趣的:(java,数据结构,源码)