如何在Kotlin中一行代码初始化嵌套列表?
Kotlin一行初始化嵌套列表的正确写法
你的写法编译失败的核心原因是:ArrayList没有接收多个独立元素的构造器重载,它仅支持无参、指定初始容量,或者传入一个已有的Collection作为参数。你直接传入多个arrayListOf实例,编译器找不到匹配的构造方法,因此报错。
结合你“不需要可变对象、列表大小固定”的需求,推荐以下几种简洁写法:
1. 完全不可变的嵌套列表(最推荐)
如果内外层都不需要修改,直接用listOf创建不可变列表,一行即可完成初始化:
val list: List<List<Int>> = listOf( listOf(1, 3, 5, 7), listOf(10, 11, 16, 20), listOf(23, 30, 34, 60) )
listOf返回的是不可变List,完全匹配你“大小固定、无需可变对象”的需求,代码最简洁。
2. 外层不可变、内层为ArrayList
如果必须保持内层元素为ArrayList(比如需要调用ArrayList的特定方法),可以用listOf包裹多个arrayListOf实例:
val list2: List<ArrayList<Int>> = listOf( arrayListOf(1, 3, 5, 7), arrayListOf(10, 11, 16, 20), arrayListOf(23, 30, 34, 60) )
3. 外层为可变列表(若后续需修改外层)
如果确实需要外层是可修改的MutableList,可以用mutableListOf直接初始化,或者给ArrayList传入一个集合参数:
// 用mutableListOf直接创建可变列表 val mutableList: MutableList<ArrayList<Int>> = mutableListOf( arrayListOf(1, 3, 5, 7), arrayListOf(10, 11, 16, 20), arrayListOf(23, 30, 34, 60) ) // 用ArrayList构造器接收集合参数 val arrayList: ArrayList<ArrayList<Int>> = ArrayList( listOf( arrayListOf(1, 3, 5, 7), arrayListOf(10, 11, 16, 20), arrayListOf(23, 30, 34, 60) ) )
内容的提问来源于stack exchange,提问作者gmmo
相关产品推荐
相关产品推荐

