Java-固定大小列表和指定初始容量的列表之间的区别



我在理解这一点时遇到了问题。

而我们做

 List<Integer> list = Arrays.asList(array);

我们不能在该列表中使用add、remove等方法。我知道Arrays.asList()返回一个固定大小的列表。

我不明白的是,如果我们创建一个像一样指定初始容量的列表

List<Integer> list2 = new ArrayList<Integer>(10);

我们可以执行该列表上的所有操作。固定大小的列表和指定初始容量的列表之间有什么区别?

我读过很多关于这方面的答案,但很难理解。有人能解释一下吗?

谢谢。

Arrays.asList(array)返回类型为java.util.Arrays.ArrayList的对象,该对象不支持添加和删除操作。

而下面的代码将返回一个类型为java.util.ArrayList的对象,该对象支持添加和删除操作。

List<Integer> list2 = new ArrayList<Integer>(10);`

很简单,Arrays.asList就是这样,您就可以将List方法与数组一起使用。ArrayList(int)适用于需要创建一个非常大的ArrayList并希望帮助加快速度的情况。

更详细地说:asList返回的List旨在作为数组的包装器。由于无法调整数组的大小,因此无法实现更改List大小的方法。大多数时候,我只是简单地使用asList将固定数量的元素添加到集合中。例如

new ArrayList<String>(Arrays.asList("hello", "world"));

令人困惑的是,ArrayList的实现非常相似——它是一个由数组支持的List。但是,ArrayList允许您更改其大小。为此,它保留了一个单独的字段,分别表示列表中有多少对象和支持数组的长度。添加一个元素,ArrayList只将array[size]设置为该元素,然后递增size字段。但是如果array[size]超出了范围呢?此时,ArrayList创建了一个新的、更大的阵列,并复制以前备份阵列中的元素。但是,如果您正在创建一个大型List,那么不断创建新的备份阵列可能会开始占用大量时间。因此,如果您知道List中的元素的大致数量,则可以使用它来通知ArrayList它应该创建的初始备份阵列的大小。这就是ArrayList(int)构造函数的作用。只有在特殊情况下,您才需要担心给ArrayList一个长度提示。

最新更新