android - 如何在 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) 允许您追加,这在大多数情况下都很好。我把这个问题留了下来,因为看起来原来的方法应该可行。
解决方案
接受initialCapacity
参数的构造函数仅使用容量作为后台数组的大小。请注意,该参数称为“容量”,而不是“大小”。如果您提前知道列表可能不会超过某个大小,这将很有用,因为这样它就不会使用比必要更大的后备数组,并且如果它也开始了以后也不必调整数组的大小小的。
与 Array 不同,ArrayList 没有固定大小。它的大小取决于当前包含哪些元素。所以它总是从零开始,除非你将元素传递给它的构造函数。
您创建了一个大小为零且支持数组容量为 12 的 ArrayList。由于它的元素为零,因此您无法访问索引大于其大小的元素。
您似乎想创建一个具有特定大小的 ArrayList,全部用零填充。没有函数或构造函数可以做到这一点,但你可以像这样使用 MutableList 做到这一点:
val test = MutableList(12) { 0 }
推荐阅读
- c# - 如何说服 Refit 不要添加 xml 序言?
- rest - 确保在后台处理 Flutter 应用程序中的 REST 调用
- swift - 在这种情况下,如何重用 UIPickerView 中的视图?
- python - 将整列附加到字典中
- python - 在将函数应用于 numpy 数组的每一行时,如何返回 numpy 数组而不是 NoneType?
- javascript - 更改宽度时叠加的图像闪烁
- crystal-reports - 水晶报表:If 语句
- api - NuGet API 获取包的版本
- asp.net-core - 实体框架 Add() 正在更新而不是插入
- r - 如何为各种 y 值绘制带有多个点和线的 geom_crossbar