如何在 Kotlin 中创建一个包含 n 个元素的 ArrayList?

Cra*_*ham 4 android kotlin

这应该是微不足道的。Kotlin 有一个ArrayList带构造函数的“initialCapacity”

如果我有这个测试用例;

class ArrayListTest : TestCase() {

  @Test
  fun testArrayList() {
      val test = ArrayList<Int>(12)
      test[3]=5
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到了例外 java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 0

在调试中运行可确认虽然 ArrayList 已创建,但其大小为零。

文档称控制容量的功能有限,因为支持数组本身可以调整大小,但这似乎并没有发生。即使我使用索引 0,我也会遇到越界异常。

我尝试偶然运行更新。我正在运行 Android Studio Arctic Fox 2020.3.1 补丁 3(2021 年 10 月 1 日)。

还有其他人遇到过并解决过这个问题吗?

编辑:嗯。test.add(5) 允许您附加,这对于大多数情况来说都很好。我留下这个问题是因为原来的方法似乎应该有效。

Ten*_*r04 8

采用参数的构造函数initialCapacity仅使用容量作为底层支持数组的大小。请注意,该参数称为“容量”,而不是“大小”。如果您提前知道列表可能不会增长到超过特定大小,那么这很有用,因为这样它就不会使用比必要的更大的支持数组,并且如果它也启动了,以后也不必调整数组的大小小的。

与 Array 不同,ArrayList 没有固定的大小。它的大小取决于当前其中的元素。因此它总是以大小零开始,除非您将元素传递给它的构造函数。

您创建了一个大小为零且后备数组容量为 12 的 ArrayList。由于它有零个元素,因此您无法访问索引大于其大小的元素。

您似乎想要创建一个具有特定大小的 ArrayList,全部用零填充。没有函数或构造函数可以准确地执行此操作,但您可以使用 MutableList 执行此操作,如下所示:

val test = MutableList(12) { 0 }
Run Code Online (Sandbox Code Playgroud)