栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ArrayList集合源码解读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList集合源码解读

1.时间复杂度角度分析数组(Array)查询效率

数据结构:数组

数组优点:基于index下标查询效率比较高

数组缺点:而根据元素值下标查询效率是非常低的

1.基于数组元素值查询和基于index下标查询的时间复杂度的计算

基于index下标查询:只需查询一次,我们可以根据下标直接定位到数组里对应的下标值,找到该下标对应的元素,时间复杂度为O(1)基于数组元素值查询:我们通过循环遍历比较进行查询,查询一次时间复杂度为O(n),假设我们的元素存放在index=5的位置上,那么我们需要比较6次,因为数组下标是从0开始,所以这个时候O(n)中n=6(因为需要查询6次),最终才找到我们的元素值对用的index位置。

总结::

基于数组index下标查询的效率是非常高的,时间复杂度为O(1)根据数组元素值进行查询的效率是非常慢的,时间复杂度为O(n) 2.ArrayList的add()、get方法、remove方法如何实现

通过ArrayList底层的无参构造函数可以得出,默认底层初始化了一个空数组

add方法如何实现:

判断集合容量是否装得下如果装不下则扩容,以1.5倍扩容,将原来数组的容量拷贝到新的数组

get方法如何实现:

直接提供根据index下标查询,效率非常高

remove方法如何实现:

查找到删除对应的index下标位置后index+1,到最后index元素值向前移动一位 3.Vector和ArrayList集合区别

相同点:

Vector和ArrayList集合默认的初始容量都是10底层都是基于数组实现都是List接口下的子类

不同点:

ArrayList集合线程不安全,Vector线程是安全的ArrayList每次扩容的容量是原来容量的1.5倍,Vector每次扩容的容量是原来容量的2倍Vector扩容时可以自己设置扩容的容量大小,ArrayList则不可以ArrayList是通过懒加载的形式初始化容量,Vector直接通过构造函数初始化容量

懒加载形式:真正需要的时候才会加载(ArrayList中只有调用了add方法底层数组才会开始加载容量,不调用add方法底层数组容量依旧为0)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号