从源码来理解ArrayList和LinkedList区别
2015-08-11 23:56
393 查看
从源码理解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有两个构造函数,第二个构造函数中将集合的元素传到链表上
都是采用链表插入数据的方法
都是采用链表删除元素的方法
链表查找元素的方法。
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有两个构造函数,第二个构造函数中将集合的元素传到链表上
都是采用链表插入数据的方法
都是采用链表删除元素的方法
链表查找元素的方法。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统