3.5 JDK源码阅读之ArrayList

       ArrayList是List接口的可变数组的实现。实现了所有可选列表的操作,并允许包括null在内的所有元素。同时ArrayList也有内部的方法用于操作数组大小以及元素。 
      每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。 
另外需要提及的一点就是,ArrayList并不是线程安全的,多线程使用时需要注意注意同步。 

其实本质就是对数组的操作,我们在使用时的简单操作的原理是透明的。

存储实现

 

构造

ArrayList提供了三种方式的构造器,可以构造一个默认初始容量为10的空列表,构造一个指定初始容量的数组,以及构造一个包含指定Collection元素的列表,这些元素按照collection的迭代器返回它们的顺序。

存储

 

有两个方法出现的次数很高:ensureCapacity()System.arraycopy() 、

删除

 

拓展:LinkedList

虽然实现了List的接口,但底层并不是对数组进行的操作,而是使用双向循环链表实现。继承于AbstractSequentialList,可以被当作堆栈、队列或双端队列进行操作。 

猜你喜欢

转载自blog.csdn.net/weixin_41395565/article/details/81709024
3.5