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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值