Kotlin初学者疑问:List()创建列表与listOf()等方法有何不同?
Kotlin中List()构造函数与listOf()/toMutableList()的差异
1. 核心用途与本质不同
List(size: Int, init: (Int) -> T):这是Kotlin标准库的顶层函数,专门用来动态生成指定长度的列表。你给出的代码里,第一个参数是从输入读取的列表长度,第二个lambda会被调用size次,每次执行时读取一行输入转成Int,最终生成对应长度的列表。listOf(vararg elements: T):用来创建包含固定已知元素的不可变列表,比如listOf(1, 2, 3),直接把传入的元素打包成列表。toMutableList():这是集合的扩展函数,作用是把现有不可变集合(比如listOf创建的列表、数组)转换成可变列表(MutableList),允许后续添加、删除元素。
2. 创建逻辑的区别
List(size, init)是按需生成元素:不需要提前准备好所有元素,而是根据索引(lambda的参数是当前元素的索引,你的代码里没用到这个参数)动态计算或读取每个元素,适合批量生成/从外部数据源构建列表的场景。listOf()是直接传入已有元素:元素是预先确定好的,适合元素数量少、内容明确的情况。toMutableList()不是创建新列表的起点,而是转换现有集合的可变性,核心是改变集合的修改权限。
3. 返回值的可变性
List(size, init)和listOf()返回的都是不可变List,默认无法修改元素、添加或删除元素。toMutableList()返回的是MutableList,支持add()、remove()、set()等修改操作。
示例对比
// 用List()动态生成5个元素(基于索引生成) val dynamicList = List(5) { it } // 结果:[0, 1, 2, 3, 4] // 用listOf()创建固定元素的列表 val fixedList = listOf(0, 1, 2, 3, 4) // 把不可变列表转为可变列表并修改 val mutableList = fixedList.toMutableList() mutableList.add(5) // 执行后mutableList变为[0, 1, 2, 3, 4, 5]
内容的提问来源于stack exchange,提问作者Jaguar
相关产品推荐
相关产品推荐

