- ArrayList:我们可以将其看作是能够自动增长容量的数组。
- 利用ArrayList的toArray()返回一个数组。
- Arrays.asList()返回一个列表。
- 迭代器(Iterator) 给我们提供了一种通用的方式来访问集合中的元素。
ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数组。在Java中,标准数组是定长的。在数组创建之后,它们不能被加长或缩短,这也就意味着你必须事先知道数组可以容纳多少元素。但是,你直到运行时才能知道需要多大的数组。为了解决这个问题,类集框架定义了ArrayList。本质上,ArrayList是对象引用的一个变长数组。也就是说,ArrayList能够动态地增加或减小其大小。数组列表以一个原始大小被创建。当超过了它的大小,类集自动增大。当对象被删除后,数组就可以缩小。
ArrayList有如下的构造函数
– ArrayList( )
– ArrayList(Collection c)
– ArrayList(int capacity)
– 第一个构造函数建立一个空的数组列表。
– 第二个构造函数建立一个数组列表,该数组列表由类集c中的元素初始化。
–第三个构造函数建立一个数组列表,该数组有指定的初始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上时,容量会自动增加。
尽管当对象被存储在ArrayList对象中时,其容量会自动增加。仍可以通过调用ensureCapacity()方法来人工地增加
ArrayList的容量。如果事先知道将在当前能够容纳的类集中存储许许多多的项时,你可能会想这样做。在开始时,通过一次性地增加它的容量,就能避免后面的再分配。因为再分配是很花时间的,避免不必要的处理可以改善性能。
ensureCapacity( )方法如下所示
– void ensureCapacity(int cap)
– 这里,cap是新的容量,相反地,如果想要减小在ArrayList对象之下的数组的大小,可以调用trimToSize( )方法,将此ArrayList 实例的容量调整为列表的当前大小。该方法如下
– void trimToSize( )
- void removeRange(int fromIndex, int toIndex)
- 移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
当使用ArrayList时,有时想要获得一个实际的数组,这个数组包含了列表的内容。可以通过调用方法toArray()来实现它。下面是几个为什么可能想将类集转换成为数组的原因
– 对于特定的操作,可以获得更快的处理时间
– 为了给方法传递数组,而方法不必重载去接收类集
– ————为了将新的基于类集的程序与不认识类集的老程序集成
ArrayList 底层采用数组实现,当使用不带参数的构造方法生成 ArrayList 对象时,实际上会在底层生成一个长度为10 的Object 类型数组如果增加的元素个数超过了 10 个,那么 ArrayList 底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。对于ArrayList 元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。
– Arrays.asList()
- 返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同Collection.toArray一起,充当了基于数组的 API与基于 collection 的 API 之间的桥梁。