首页 > 其他 > 详细

ArrayList 原理及应用

时间:2020-07-23 09:11:36      阅读:78      评论:0      收藏:0      [点我收藏+]

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插入或删除数据效率会慢,因为将数组操作复制移动。

  

  查询源码,通过下表直接过去元素对象

  技术分享图片

 

    技术分享图片

 

    还有 其他方法,更详细解析,后续补充。

  如有疑问的地方,欢迎技术大牛指出,点评。

 

ArrayList 原理及应用

原文:https://www.cnblogs.com/zhaiMaoDou/p/13363620.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!