这应该是微不足道的。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) 允许您附加,这对于大多数情况来说都很好。我留下这个问题是因为原来的方法似乎应该有效。
采用参数的构造函数initialCapacity仅使用容量作为底层支持数组的大小。请注意,该参数称为“容量”,而不是“大小”。如果您提前知道列表可能不会增长到超过特定大小,那么这很有用,因为这样它就不会使用比必要的更大的支持数组,并且如果它也启动了,以后也不必调整数组的大小小的。
与 Array 不同,ArrayList 没有固定的大小。它的大小取决于当前其中的元素。因此它总是以大小零开始,除非您将元素传递给它的构造函数。
您创建了一个大小为零且后备数组容量为 12 的 ArrayList。由于它有零个元素,因此您无法访问索引大于其大小的元素。
您似乎想要创建一个具有特定大小的 ArrayList,全部用零填充。没有函数或构造函数可以准确地执行此操作,但您可以使用 MutableList 执行此操作,如下所示:
val test = MutableList(12) { 0 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |