From 8ea333e30a4e9e66e557cff8a72c327aa326e868 Mon Sep 17 00:00:00 2001 From: liuwen <15665334889@163.com> Date: Sat, 7 Mar 2020 23:32:44 +0800 Subject: [PATCH] Default Changelist --- ...6\344\271\240\347\254\224\350\256\260.txt" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "second/week_01/74/\345\255\246\344\271\240\347\254\224\350\256\260.txt" diff --git "a/second/week_01/74/\345\255\246\344\271\240\347\254\224\350\256\260.txt" "b/second/week_01/74/\345\255\246\344\271\240\347\254\224\350\256\260.txt" new file mode 100644 index 0000000..dc5f884 --- /dev/null +++ "b/second/week_01/74/\345\255\246\344\271\240\347\254\224\350\256\260.txt" @@ -0,0 +1,46 @@ +JAVA源码学习 - java.util.ArrayList + +1>数据结构 + 基于数组,数组在内存中是连续的,ArrayList表现为访问快速,查询效率高,增删效率低下。 + 取:按数组角标 快速 + 增删:改变要操作角标位置后面所有元素角标,效率低。新增用到主要本地方法arraycopy, + + + DEFAULT_CAPACITY:默认容量10 + int size:集合元素个数 + Object[] elementData:实际存储元素的数组 + + + +2.算法 + 集合顶层接口Iterable 遍历器接口:待补充 + + 重要方法: + *native void arraycopy(Object src, int srcPos, + Object dest, int destPos, + int length):本地方法-(Object暂论数组)将数组src角标srcPos开始length个元素添加到数组dest角标destPos开始的位置上,覆盖原元素 + void ensureCapacityInternal(int minCapacity):如果elementData为空数组,判断入参minCapacity和DEFAULT_CAPACITY返回大者,否则返回minCapacity + rangeCheckForAdd(int index):判断是否会引起角标越界 + **boolean batchRemove(Collection c, boolean complement):遍历集合,如果当前元素不在c中,将元素前移到w(进入循环的次数)角标下-> + for (; r < size; r++) if (c.contains(elementData[r]) == complement) elementData[w++] = elementData[r]; + 再根据w,r和size,做剩余操作。待码友指点 + + + 新增元素主要方法: + boolean add(E e):elementData数组末尾添加元素 + void add(int index, E element):指定角标下添加元素 + boolean addAll(Collection c):新增集合中所有元素 + boolean addAll(int index, Collection c):指定位置新增集合中所有元素 + + 删除元素主要方法: + E remove(int index):通过arraycopy方法删除角标下元素 + boolean remove(Object o):遍历删除指定元素 + void fastRemove(int index):通过arraycopy方法实现删除 + void clear():elementData=null,size=0 + void removeRange(int fromIndex, int toIndex):删除角标fromIndex到toIndex下所有元素,通过arraycopy实现toIndex后元素前移, + 如果toIndex后元素少于删除元素,将多出元素设置为null,更新size + removeAll(Collection c):调用batchRemove删除入参集合所有包含的元素,传参complement=false。 + + + +总结:源码耐人寻味,特别算法,设计巧妙。本次时间紧迫,学习不深入,uml工具待学习,后续系统化学习时间,强化学习。感谢 \ No newline at end of file -- Gitee