0
点赞
收藏
分享

微信扫一扫

ArrayList的添加和删除操作实现原理图解

上一篇 <<<Java集合类图总览
下一篇 >>>ArrayList的动态扩容、ModCount及fail-fast原理


Arraylist数据结构:集合底层使用动态数组实现,随机查询效率非常快,插入和删除需要移动整个数组、效率低。

ArrayList添加操作交互图

ArrayList删除操作

//下标范围检测,看是否数组越界
if (index >= size) {
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
}
//启动线程安全问题
modCount++;
//获得要删除的数据
E oldValue = (E) elementData[index];
/**
* 判断需要移动的数据
* a、假设现有数据[1,2,3,4,5],现在需要把3数据移除,传入的index为2
* b、则需要移动的位数:总位数5-传入的2-1=2
* c、也就是3删除后,4和5两个数左移,numMoved=2
*
*/

int numMoved = size - index - 1;

if (numMoved > 0) {
/**
* 数据移动参数:
* ---源----
* elementData:现有数据
* index + 1:从哪个下标开始往前移
* ---目标----
* elementData:移动到的目标数组是什么
* index:需要往前移到哪个下标开始
* ---移动的个数----
* numMoved:需要移动多少个
*/

System.arraycopy(elementData, index + 1, elementData, index,
numMoved);
}
//末位置为null,数组长度不变
elementData[--size] = null;
return oldValue;

相关文章链接:
<<<Java集合类图总览
<<<ArrayList的动态扩容、ModCount及fail-fast原理
<<<LinkedList增删改查操作底层实现原理
<<<数组拷贝的几种方式及和链表结构的对比
<<<Jdk1.7HashMap源码分析
<<<Jdk1.7HashMap如何扩容及解决死循环问题
<<<JDK1.8HashMap源码分析
<<<ConcurrentHashMap在JDK1.8版本比1.7改进了什么
<<<JDK8的HashMap中红黑树左旋右旋原理图解
<<<基于LinkedHashMap手写LRU淘汰策略
<<<HashSet集合底层实现原理
<<<HashTable底层实现原理及和ConcurrentHashMap区别
<<<java集合常见面试题

举报

相关推荐

0 条评论