Java 为什么在ArrayList的圆括号内有一个整数

Java 为什么在ArrayList的圆括号内有一个整数,java,arraylist,integer,parentheses,Java,Arraylist,Integer,Parentheses,我在某处看到一个java.util.List定义如下。 List myList=new ArrayList(0) 有人能解释一下括号里的整数是做什么的,以及如何使用它吗?谢谢。它指定列表的容量来定义ArrayList的初始容量。该参数决定了ArrayList的起始容量 ArrayList在内部分配内存以容纳一定数量的对象。当您向它添加更多元素时,它必须分配更多内存并将所有数据复制到新位置,这需要一些时间。因此,您可以指定要在ArrayList中放置多少对象来帮助Java。 开始大小0可能表示程序

我在某处看到一个
java.util.List
定义如下。
List myList=new ArrayList(0)

有人能解释一下括号里的整数是做什么的,以及如何使用它吗?谢谢。

它指定列表的容量来定义ArrayList的初始容量。

该参数决定了
ArrayList的起始容量

ArrayList
在内部分配内存以容纳一定数量的对象。当您向它添加更多元素时,它必须分配更多内存并将所有数据复制到新位置,这需要一些时间。因此,您可以指定要在
ArrayList
中放置多少对象来帮助Java。
开始大小
0
可能表示程序员认为
ArrayList
很少使用,因此不需要为它分配内存

[编辑]

为了澄清,正如@LuiggiMendoza和@emory在讨论中所说,很难想象使用
0
作为初始容量会有什么意义。在大多数情况下,默认构造函数工作正常。

不要将数组列表的大小及其容量混为一谈:

  • 大小是列表中元素的数量
  • 容量是列表在不重新分配内部结构的情况下可以容纳的元素数量
调用
新建ArrayList(0)
时,您设置的是列表的初始容量,而不是其大小。换句话说,当以这种方式构造时,数组列表的生命周期开始为空。

当用作

List<String> strList = new ArrayList<String>(5);
List strList=newarraylist(5);
它构造一个具有指定初始容量的空列表

默认情况下,未指定任何内容

List<String> strList = new ArrayList<String>;
List strList=newarraylist;
构建一个初始容量为10的空列表

阅读


不要错误地将其理解为ArrayList的大小。

这是定义
ArrayList的初始容量

如果需要,您不必传递size参数,因为有一个构造函数也没有参数

每当您添加一个附加元素时,如果列表大小不允许添加,则
列表
类将在
中创建另一个更大的
列表
,并将旧的
数组
的内容与附加元素一起复制到它,删除旧的
数组


初始实例化中的容量用于创建
列表
的确切
大小
,这有助于通过创建新的
列表
、删除旧列表和在运行时复制内容来不分配额外的内存块,这对性能有帮助。

我想这在我发布的文档中有很好的定义。也许OP的问题是:为什么?“起始大小为0可能表示程序员认为ArrayList很少使用”也许,也许不是。这取决于实现。@LuiggiMendoza取决于实现?实现被指定为()。将起始大小指定为0的最合乎逻辑的原因是为了节省内存,预计它将在很长一段时间内为空。@emory的确,如果您知道数组可能有数千个元素,则情况可能非常糟糕,因为每次添加新元素时,arraylist都必须增加(这意味着:创建一个新数组,其大小每增加一个因子,即最后一个数组长度,可能为1.5,然后将所有元素从旧数组复制到新数组,是的,当您有大量数据时,会非常繁重)。此外,根据Java语言设计人员所做的进一步分析,默认构造函数将数组的容量初始化为10。我看不出初始容量为0对性能有什么好处。@emory这也是OpenJDK实现,还有Sun JDK实现(可能还有其他我还不知道的实现)。可能有意义的边缘情况是
无效打印(@NotNullable List allhonestpolicials)
。必须提供非空列表,但不要使用
add
方法。添加健全性检查
assert 0==allhonestpolicials.size():“BS”
此外,最好添加使用不同容量初始化ArrayList的优点和缺点。我本来可以,但问题不是“使用不同容量初始化
ArrayList
的优点和缺点”。嗯……我知道这可能是既定的术语,但不是“大小”有点误导人?难道“满”、“满”、“空”或“饱和”不是更好吗?