说一下ArrayList的默认大小?它是如何进行扩容的?
ArrayList在Java中是一种动态数组,其内部实现是通过数组来存储元素的。以下是关于ArrayList大小和扩容的一些详细信息:
- 默认大小: 在Java 7和Java 8中,当你创建一个不带任何参数的新ArrayList时,它的初始容量是10。但请注意,这只是内部数组的大小,并不是ArrayList的大小。刚创建时,ArrayList的大小(即其中的元素数量)实际上是0。
-
扩容方式: 当添加元素导致内部数组无法容纳更多元素时,ArrayList会进行扩容。扩容的过程是创建一个新的数组,然后将旧数组的元素复制到新数组中。新数组的大小是旧数组大小的1.5倍(即旧数组大小加上旧数组大小的一半),这个过程在ArrayList的
grow()
方法中实现。 -
扩容代价: 由于涉及到数组的复制,ArrayList的扩容操作是比较昂贵的。如果你提前知道ArrayList会包含大量元素,那么最好在创建ArrayList时就指定一个足够大的初始容量,这样可以减少扩容操作,提高性能。
以下是创建一个指定初始容量的ArrayList的示例:
List<String> list = new ArrayList<>(100); // 初始容量为100
总的来说,ArrayList是一种动态数组,可以根据需要自动扩容,但扩容操作的代价较高,所以最好在创建ArrayList时就指定一个足够大的初始容量。