说一下ArrayList的默认大小?它是如何进行扩容的?

ArrayList在Java中是一种动态数组,其内部实现是通过数组来存储元素的。以下是关于ArrayList大小和扩容的一些详细信息:

  1. 默认大小: 在Java 7和Java 8中,当你创建一个不带任何参数的新ArrayList时,它的初始容量是10。但请注意,这只是内部数组的大小,并不是ArrayList的大小。刚创建时,ArrayList的大小(即其中的元素数量)实际上是0。

  2. 扩容方式: 当添加元素导致内部数组无法容纳更多元素时,ArrayList会进行扩容。扩容的过程是创建一个新的数组,然后将旧数组的元素复制到新数组中。新数组的大小是旧数组大小的1.5倍(即旧数组大小加上旧数组大小的一半),这个过程在ArrayList的grow()方法中实现。

  3. 扩容代价: 由于涉及到数组的复制,ArrayList的扩容操作是比较昂贵的。如果你提前知道ArrayList会包含大量元素,那么最好在创建ArrayList时就指定一个足够大的初始容量,这样可以减少扩容操作,提高性能。

以下是创建一个指定初始容量的ArrayList的示例:

List<String> list = new ArrayList<>(100); // 初始容量为100

总的来说,ArrayList是一种动态数组,可以根据需要自动扩容,但扩容操作的代价较高,所以最好在创建ArrayList时就指定一个足够大的初始容量。

发表评论

后才能评论