Kotlin中如何创建ArrayList<Int, Object>式的可变多类型二维列表?
解决方案:用Map替代二维列表实现分组管理
你要的ArrayList<Int, Object>并不是Kotlin的标准结构,因为ArrayList是单泛型列表,没法直接存储键值对。针对你按分组ID快速定位对象的需求,MutableMap<Int, MutableList<YourObject>>是最适配的方案,完全不需要给对象添加冗余的分组ID字段。
具体实现步骤
声明分组Map
以分组ID为键,对应分组的对象列表为值,创建可变Map:// 把YourObject替换成你实际使用的对象类型 val groupMap = mutableMapOf<Int, MutableList<YourObject>>()往指定分组添加对象
用getOrPut方法简化逻辑:如果分组不存在则自动创建空列表,再把对象加入列表:fun addObjectToGroup(groupId: Int, obj: YourObject) { val targetGroup = groupMap.getOrPut(groupId) { mutableListOf() } targetGroup.add(obj) }快速获取指定分组的所有对象
直接通过分组ID取值,也可以用getOrDefault避免空值:// 获取指定分组,返回值可能为null,需自行处理 val targetObjects = groupMap[1001] // 或者默认返回空列表,避免空指针 val targetObjects = groupMap.getOrDefault(1001, mutableListOf())遍历所有分组和对象
直接遍历Map的键值对即可处理全部内容:for ((groupId, objectsInGroup) in groupMap) { // 处理当前分组ID和对应的对象列表 println("分组ID $groupId 包含 ${objectsInGroup.size} 个对象") }
方案优势
- 无需修改原有对象结构,不存在冗余的dummy对象
- 分组查找为O(1)时间复杂度,比遍历二维列表高效得多
- 支持动态添加/删除分组、对象,满足可变需求
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

