You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中洗牌MutableList且不修改原列表?

解决Kotlin中shuffle()修改原列表的问题

这个问题其实是Kotlin里引用类型的常见小坑~你之前的代码里var shuffAlp = alphabets并没有创建新的列表,只是让shuffAlp和alphabets指向了内存里的同一个MutableList对象,所以调用shuffAlp.shuffle()的时候,本质上是在修改那个唯一的列表,原列表自然也跟着变了。

不用重复创建两次相同的初始列表,有这几种更优雅的方法:

方法1:复制原列表再洗牌

用toMutableList()给原列表创建一个副本,这样新变量指向的是全新的列表实例,操作它不会影响原列表:

fun main(){
 val alphabets = ('A'..'Z').toMutableList()
 val shuffAlp = alphabets.toMutableList() // 复制原列表生成新实例
 shuffAlp.shuffle()
 println(alphabets) // 输出原有序列表
 println(shuffAlp) // 输出洗牌后的列表
}

方法2:用展开运算符创建新列表

如果你习惯用mutableListOf(),可以配合展开运算符快速生成副本:

val shuffAlp = mutableListOf(*alphabets.toTypedArray())
shuffAlp.shuffle()

方法3:用shuffled()直接获取洗牌后的新列表

如果不需要新列表是Mutable类型,直接用shuffled()函数更简洁——它会返回一个洗牌后的新List,完全不会修改原列表:

fun main(){
 val alphabets = ('A'..'Z').toMutableList()
 val shuffAlp = alphabets.shuffled() // 返回新的洗牌列表,原列表不变
 println(alphabets)
 println(shuffAlp)
}

核心思路就是:不要直接赋值引用,而是创建原列表的副本,这样就能同时保留原列表和洗牌后的列表啦~

内容的提问来源于stack exchange,提问作者EManual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:37:44