ArrayList 在开发中应用的比较多,掌握 ArrayList对我们开发非常有用,今天来聊聊它,首先记住几个问题:
1、ArrayList是什么?
2、ArrayList有什么用?
3、ArrayList如何实现动态扩容?
接下来看ArrayList的类关系图,ArrayList 是一个数组容器,它继承 AbstractList 抽象类,实现LIist接口类。默认的数组长度10,需要添加更多的数据时,ArrayList会的自动扩展容量。
ArrayList 继承AbstractList ,实现了List,即提供了相关的方法添加、修改、删除、遍历、克隆、比较等功能。
另外ArrayList 实现Serializable类可序列化。
ArrayList的特点是:查询元素效力较快,插入元素和删除元素较慢。一会下面我们看下源码。
ArrayList 常见的方法
array.add(Object) //添加元素
array.get(index)//根据下标获取元素
array.size()//获取链表的长度大小
array.remove(Object)//移除对象,此方法会改变数组的下标索引,遍历时会出现异常 IndexOutOfBoundsExcption
array.toArray()//将链表转成数组
array.indexOf(Object)//获取元素的下标,没有返回-1
array.isEmpty()//判断链表的长度是否等于0,
array.contains(Object)//判断是否包含该元素
...
ArrayLisy源码解析
源码如何实现数组链表扩容?
aad(Object)方法中调用了 ensureCapacityInternal(int)方法,给 Object[] elementData 组数对象重新赋值。
核心代码是这里,长度通过扩容一杯,将数组通过重新拷贝
所以说,为什么ArrayList插入或删除数据效率会慢,因为将数组操作复制移动。
查询源码,通过下表直接过去元素对象
还有 其他方法,更详细解析,后续补充。
如有疑问的地方,欢迎技术大牛指出,点评。
原文:https://www.cnblogs.com/zhaiMaoDou/p/13363620.html