码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayList源码分析

时间:2020-05-20 20:13:49      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:mac   实现   方法   str   fast   有一个   ransient   执行   one   

顶部注释告诉我们的信息

  • ArrayList是实现了List接口的可变长数组(ArrayList的底层是基于数组实现的)

  • ArrayList允许内部存在null元素

  • ArrayList除了不是线程安全的之外,和Vector基本差不多。(如果想使用线程安全的ArrayList:List list = Collections.synchronizedList(new ArrayList(...));或者使用CopyOnWriteArrayList

  • size、isEmpty、get、set、iterator和listIterator方法都以固定时间运行,时间复杂度为O(1)。add和remove方法需要O(n)时间。与用于LinkedList实现的常数因子相比,此实现的常数因子较低。

  • 每个ArrayList实例都有一个capacity属性,随着元素不断add到ArrayList,capacity会自动增加

  • 在添加大量元素之前,可以使用ensureCapacity操作来增加ArrayList的容量,这可以减少递增的重新分配次数

  • ArrayList的iterator和listIterator方法返回的迭代器是fail-fast的。

  • fail-fast不能保证一定会被执行的,所以依赖于fail-fast抛出的异常的程序都是错误的写法。fail-fast抛出的异常只能用来帮你detect bugs


源码部分

定义

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
  • 继承于AbstractList类,AbstractList提供了List接口的骨干实现,以最大程度减少随机访问ArrayList所需的工作

  • 实现了RandomAccess接口,这是个Marker Interface,用来表示List支持常数时间内的快速随机访问,用index去遍历实现了RandomAccess接口的类是要比用iterator遍历快的

+实现了Cloneable接口,表明其可以调用clone()方法来返回实例的field-for-field拷贝

  • 实现了java.io.Serializable接口,表明该类具有序列化功能(transient关键字表示:这个实例序列化时不要序列化transient修饰的属性)

ArrayList源码分析

标签:mac   实现   方法   str   fast   有一个   ransient   执行   one   

原文地址:https://www.cnblogs.com/swifthao/p/12925739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!