Java ArrayList工作原理及实现
2017-11-21 19:51
253 查看
. 概述
关于Java集合的小抄中是这样描述的:以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。
按数组下标访问元素—get(i)/set(i,e) 的性能很高,这是数组的基本优势。
直接在数组末尾加入元素—add(e)的性能也高,但如果按下标插入、删除元素—add(i,e), remove(i), remove(e),则要用System.arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。
然后再来学习一下官方文档:
Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including
null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)
ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”。
来看一段简单的代码:
其中,
add操作可以理解为直接将数组的内容置位,
remove操作可以理解为删除index为0的节点,并将后面元素移到0处。
2. add函数
当我们在ArrayList中增加元素的时候,会使用add函数。他会将元素放到末尾。具体实现如下:
ensureCapacityInternal。这个函数其实就是自动扩容机制的核心。我们依次来看一下他的具体实现
add10个元素之后,再进行一次add时,就会发生自动扩容,数组长度由10变为了15具体情况如下所示:
3 set和get函数
Array的put和get函数就比较简单了,先做index检查,然后执行赋值或访问操作:
4 remove函数
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
相关文章推荐
- Java ArrayList工作原理及实现
- Java ArrayList工作原理及实现
- Java ArrayList工作原理及实现
- Java ArrayList工作原理及实现
- Java CopyOnWriteArrayList工作原理及实现(一)
- Java使用Arrays、ArrayList、LinkedList、Vector实现插入查询性能分析
- java 对ArrayList排序,实现Comparable接口
- java 数组实现迭代方法 iterator,模仿Arraylist
- Java Collection Framework 中 ArrayList的实现
- 深入Java集合学习系列:ArrayList的实现原理
- 数据结构—顺序表(自己实现Java的ArrayList)
- 深入Java集合学习系列:ArrayList的实现原理
- 为什么java.util.concurrent 包里没有并发的ArrayList实现?
- 简单实现Java中的ArrayList
- java实现list清除重复的字符串;arraylist动态数组;角谷定理最终得1,找出10000以内哪个数字的步骤最长
- 深入java集合学习2-ArrayList的实现原理
- 深入Java集合学习系列:ArrayList的实现原理
- 深入Java集合学习系列:ArrayList的实现原理
- java 语言对计算器工作原理的实现+JFrame
- 深入Java集合学习系列:ArrayList的实现原理