首页 > 解决方案 > 如何在 Kotlin 中创建包含 n 个元素的 ArrayList?

问题描述

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

如果我有这个测试用例;

class ArrayListTest : TestCase() {

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

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

在调试中运行确认虽然创建了 ArrayList,但它的大小为零。

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

我尝试在 offchance 上运行更新。我正在运行 2021 年 10 月 1 日的 Android Studio Arctic Fox 2020.3.1 Patch 3。

有没有其他人遇到并解决了这个问题?

编辑:嗯。test.add(5) 允许您追加,这在大多数情况下都很好。我把这个问题留了下来,因为看起来原来的方法应该可行。

标签: androidkotlin

解决方案


接受initialCapacity参数的构造函数仅使用容量作为后台数组的大小。请注意,该参数称为“容量”,而不是“大小”。如果您提前知道列表可能不会超过某个大小,这将很有用,因为这样它就不会使用比必要更大的后备数组,并且如果它也开始了以后也不必调整数组的大小小的。

与 Array 不同,ArrayList 没有固定大小。它的大小取决于当前包含哪些元素。所以它总是从零开始,除非你将元素传递给它的构造函数。

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

您似乎想创建一个具有特定大小的 ArrayList,全部用零填充。没有函数或构造函数可以做到这一点,但你可以像这样使用 MutableList 做到这一点:

val test = MutableList(12) { 0 }

推荐阅读