上一篇博客讲了顺序表及其底层的实现, 那么这节课我们就来讲一下ArrayList的具体构造和使用.
目录
关于ArrayList的几点注意:
- ArrayList是一个普通的类,包含在java.util包中. 若要使用ArrayList,须导入java.util.ArrayList .
- ArrayList是以泛型方式实现的, 使用时必须先实例化.
- ArrayList实现了RandomAccess接口, 表明ArrayList支持随机访问.
- ArrayList实现了Cloneable接口, 表明ArrayList是可以clone的.
- ArrayList实现了Serializable接口, 表明ArrayList是支持序列化的
- ArrayList底层是一段连续的空间,并且可以动态扩容.(是一个动态类型的顺序表).
一. ArrayList的构造
ArrayList有三种构造方法:
ArrayList ( )
ArrayList (Collection <? extends E> c)
ArrayList (int initialCapacity)
(1) 无参的构造方法:
elementData是一个数组引用, DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个空数组. 所以, 如果调用了没有参数的构造方法,表明为ArrayList初始化了一个空数组.
(2) 带一个整型参数的构造方法:
此时的initialCapacity表示给数组初始化的大小.如果initialCapacity > 0 , 初始化一个长度为initialCapacity的数组. 如果initialCapacity == 0 , 初始化一个长度为0的数组. 如果initialCapacity < 0 , 抛出异常(Illegal Capacity).
(3) 带一个Collection参数的构造方法
该构造方法的作用是利用其他Collection来构建ArrayList.
只要实现了Collection接口的类, 且类的参数类型继承于E或和E相同 (E在实例化时由ArrayList指定)的类型参数, 都可以传进来.
例如:
ArrayList是实现了Collection接口的, arrayList的参数类型Integer和arrayList3是相同的. 所以可以直接传递一个arrayList.
二. ArrayList的常见方法
虽然ArrayList提供的方法比较多, 但是常用的方法如上图所示, 当需要用到其他方法时, 我们可以自行查看ArrayList的帮助文档.
三. ArrayList的遍历
ArrayList的遍历有三种方法
(1) for循环遍历.
(2) foreach循环遍历.
(3) 使用迭代器Iterator.
四. ArrayList的优缺点
(1) 缺点: ArrayList底层使用连续的空间, 不方便插入和删除元素(因为要移动数组元素).
(2) 缺点: ArrayList扩容可能会浪费内存空间.
(3) 优点: ArrayList更适合根据下标查找或更新的场景.
如何解决顺序表不方便插入和删除元素的问题呢? -- 链表.