怎么把arraylist转化为数组_java集合系列(3)ArrayList

本文详细介绍了ArrayList,包括其概念、继承关系、特点,并通过源码分析了构造方法、增删改查操作。文章还讨论了ArrayList与其他数据结构如数组、LinkedList和Vector的对比,以及遍历ArrayList的高效方式。最后总结了ArrayList的线程安全性、序列化和扩容等关键点。
摘要由CSDN通过智能技术生成

这篇文章开始介绍ArrayList。ArrayList基本上是我们在平时的开发当中,使用最多的一个集合类了,它是一个其容量能够动态增长的动态数组。所以这篇文章,旨在从源码的角度进行分析和理解。为了使得文章更加有条理,还是先给出这篇文章的大致脉络:

首先,ArrayList的基本介绍和源码API(只给出方法分析,重要的方法给出详细代码)。

然后,介绍遍历ArrayList的几种方式

接下来,叙述一下ArrayList与其他集合关键字的区别和优缺点

最后,进行一个总结

OK,开始今天的文章。

一、ArrayList认识

1、概念

概念:ArrayList是一个其容量能够动态增长的动态数组。但是他又和数组不一样,下面会分析对比。它继承了AbstractList,实现了List、RandomAccess, Cloneable, java.io.Serializable。

2、继承关系

为此我们需要先知道ArrayList在整个java集合框架体系里面处于一个什么样的位置。一张图来说明:

2b4559dfb0f56c3a4fdbc4e33e96e920.png

从上面我们发现ArrayList的最根部就是实现了Collection接口。下面我们深入进去,看看从ArrayList的角度来分析一下继承关系:

f33273580c101010df1eb2b9017272f7.png

上面这张图基本上描述的很清晰了,实现了四个接口一个抽象类。它继承了AbstractList抽象类,实现了List、RandomAccess, Cloneable, Serializable接口。

它继承于AbstractList,实现了List,RandomAccess[随机访问],Cloneable[可克隆], java.io.Serializable[序列化]这些接口。

ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能

(1)ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。

(2)ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆

(3)ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输

和Vector不同,ArrayList中的操作不是线程安全的。所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

3、特点

基本的ArrayList,常常用于随机访问元素,但是在List中间插入和移除元素时较慢。同时,ArrayList的操作不是线程安全的!一般在单线程中才使用ArrayList,而在多线程中一般使用Vector或者CopyOnWriteArrayList。对于这些我们先有一个概念。

OK,对于ArrayList的基本认识,主要就是知道是动态的数组,还有其继承关系就可以了,关于他的特点,我们知道其是数组,那么特点就和数组的一样了:随机访问元素比较好。

二、从源码分析ArrayList

既然它继承了AbstractList抽象类,实现了List、RandomAccess, Cloneable, Serializable接口。 那么他肯定就会有继承过来的特性,下面对其方法先进行一个归纳整理。

1、构造方法
ArrayList():构造一个初始容量为10的空列表

ArrayList(Collection<?extend  E> c):构造一个包含指定元素的列表

ArrayList( int initial
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值