从源码理解ArrayList和LinkedList区别
ArrayList
ArrayList默认容量为10,实质是一个数组用于存放元素,size表示ArrayList所包含的元素个数。
ArrayList的3个构造函数,第一个构造函数指定容量,第二个构造函数默认为一个空数组,第三个构造函数是从集合c转变为Arraylist的数组
add函数中,先确认数组容量够不够,一开始如果默认初始化(也就是调用第二个构造函数),添加元素时grow出来数组容量为10,构造了一个新的数组并且copy原来数组元素的值,然后element[0]赋值,第二次添加元素时因为elementData != EMPTY_ELEMENTDATA且
minCapacity - elementData.length <0所以直接element[1]赋值,并没有扩充容量,只有当满容量时才会扩容。
remove(int)函数,指移走序号为index的元素,numMoved指的是index后面元素个数,System.arraycopy后面的元素往前推一格,最后的元素置null,返回被删除的value
跟上面remove(int)的原理一样.
如果找得到,则返回序号,否则返回-1
LinkedList
LinkedList存放数据采用的是链表形式存放
first是指向首节点,last是指向尾结点
LinkedList有两个构造函数,第二个构造函数中将集合的元素传到链表上
都是采用链表插入数据的方法
都是采用链表删除元素的方法
链表查找元素的方法。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012432475/article/details/47430687