数据结构源码
2024-03-12 10:30:44 0 举报
java常用数据结构流程图
作者其他创作
大纲/内容
1.1.4 elementData被初始化扩容为一个长度为10的object[]
add(e)
first
1.rangeCheckForAdd(index);检查范围,也就是检查当前长度够你的入参索引用吗逻辑:if (index > size || index < 0) throw new IndexOutOfBoundsException(outOfBoundsMsg(index));用size而不是用的elementData.length与入参的index进行比较如果大于,则手动throw一个越界异常问题1:用size而不是用的elementData.length与入参的index进行比较。???问题2:把idex>size这个判断放前边add方法如果传index只能是两种情况:1.不能越过空的位置往后放2.用来覆盖
如果构成一个链表大致如下:
2. elementData[size++] = e;把我们第一次add的元素赋值给长度为10的Object数组的0号位置上size ++ 记录了当前list中的元素个数,并且可以巧妙作为下一次赋值的数组的索引位置
prev引用
e
ArrayList
1.rangeCheck(index);if (index >= size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
LinkedList
ArrayList初始化和首次add的调用逻辑
NULL
1. ensureCapacityInternal(size + 1);
last
boolean fff = arrayList.remove(\"fff\");
data数据
ensureCapacityInternal(size + 1);
之后的调用可以依次类推,都会把add的元素添加到链表的尾部
增加元素到链表
arrayList.get(1);
next引用
1.ensureCapacityInternal(size + 1);确定内部容量
接下来进行第三次次调用add之后变化如下:
fastRemove(index);
无参构造
删除逻辑:把要删除位置之后的元素与要删除位置之前的元素拼接成新的数组,然后把原来要删除位置之后的哪一个元素置为null换言之:就是把所有元素往前挪一位,把最末尾的置为null置为null的作用,源码中注释为:clear to let GC do its work,就是让垃圾收集器赶紧回收这个位置上的垃圾
无返回值
linkedList.add(\"aaa\");
2 e
然后通过linkLast这段代码linkLast之后会出现:
返回true/false
void linkLast(E e)
内部调用void linkLast(e);如果不抛出异常,直接返回true
ArrayList的扩容机制
add(\"aaa\")
2.elementData(index); return (E) elementData[index];
。。。。。。list.add(\"首次扩容\")
程序入口List<String> linkedList = new LinkedList<String>();
1.1.3grow(minCapacity);就是对初始化的{}的elementData进行扩容
elementData[index] = element; size++;
具体代码如下:
3 e
删除
arrayList查询
minCapacity - elementData.length > 0minCapacity > elementData.length size + 1 > elementData.lengthsize > elementData.length -1size > 9即size == 10时,才会进行调用grow();方法也就是再第11次add方法被调用时换言之,就是第一次初始化的elementData被用完时
接下来进行第二次调用add之后变化如下:
无参构造:对成员变量elementData赋值为{}
new ArrayList();
LinkedList和ArrayList的继承uml图
arrayList.add(\"aaa\");
add带位置索引的方法
收藏
0 条评论
下一页