7.1 设置ArrayList的初始大小的意义| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

提问:为什么要设置初始大小?

您可以通过执行以下操作来设置ArrayList的初始大小:

ArrayList<Integer> arr=new ArrayList<Integer>(10);
复制代码

但是,你做不到

arr.add(5, 10);
复制代码

因为它会导致超出范围的异常。

如果您无法访问分配的空间,设置初始大小有什么用?

add函数的定义是,add(int index, Object element)所以我不添加索引10。

我自己运行了下,以下是错误

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5, Size: 0
	at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:787)
	at java.base/java.util.ArrayList.add(ArrayList.java:512)
	at Util.TestJue.main(TestJue.java:15)
复制代码

回答1:

您将数组列表的大小与容量混淆了:

1, 大小是在列表中的元素的数目;

2, 容量是多少元素列表可以潜在地容纳而不重新分配其内部结构。

调用new ArrayList<Integer>(10)时,您是在设置列表的初始容量,而不是列表的大小。换句话说,以这种方式构造时,数组列表的初始值为空。

将十个元素添加到数组列表的一种方法是使用循环:

for (int i = 0; i < 10; i++) {
  arr.add(0);
}
复制代码

在这以后,你可以修改索引为0..9的元素。

回答2:

如果要使用预定义大小的列表,则还可以使用:

List<Integer> arr = Arrays.asList(new Integer[10]);
复制代码

回答3:

您还可以使用Collections类

ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
复制代码

这会向你的arr中添加10个0

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享