Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 可变与不可变集合

可变与不可变集合

在 Kotlin 中,集合(Collection)是处理数据的重要工具。Kotlin 标准库提供了两种类型的集合:可变集合(Mutable Collection)和不可变集合(Immutable Collection)。理解它们的区别和使用场景是高效编程的关键。


1. 不可变集合(Immutable Collection)

不可变集合是指创建后内容不可修改的集合。任何试图修改不可变集合的操作(如添加、删除或更新元素)都会导致编译错误。

常见不可变集合类型

  • List:有序集合,元素可重复
  • Set:无序集合,元素唯一
  • Map:键值对集合

示例代码

val immutableList = listOf("Apple", "Banana", "Orange")
// immutableList.add("Grape")  // 编译错误:不可变集合不支持修改操作

val immutableMap = mapOf(1 to "One", 2 to "Two")
// immutableMap[3] = "Three"   // 编译错误

2. 可变集合(Mutable Collection)

可变集合允许在创建后动态修改内容(增删改元素)。Kotlin 通过 Mutable 前缀标识可变集合类型。

常见可变集合类型

  • MutableList
  • MutableSet
  • MutableMap

示例代码

val mutableList = mutableListOf("Red", "Green", "Blue")
mutableList.add("Yellow")  // 允许添加元素
mutableList.remove("Red") // 允许删除元素

val mutableMap = mutableMapOf("a" to 1, "b" to 2)
mutableMap["c"] = 3       // 允许添加新键值对

3. 不可变 vs 可变的本质区别

特性不可变集合可变集合
修改操作不支持支持
线程安全性天然线程安全需手动同步
性能开销较低(无需同步机制)较高(可能需同步)
函数式编程友好性更优(纯函数)需谨慎使用

4. 相互转换

Kotlin 提供了便捷方法在两种集合间转换:

// 不可变 → 可变
val immutable = listOf(1, 2, 3)
val mutableVersion = immutable.toMutableList()

// 可变 → 不可变
val mutable = mutableListOf("A", "B")
val immutableVersion = mutable.toList()

5. 最佳实践建议

  1. 默认优先使用不可变集合

    • 除非明确需要修改,否则使用 listOf()/mapOf() 等不可变版本
    • 遵循"不可变性优先"原则减少副作用
  2. 需要修改时再创建可变副本

    val original = listOf(1, 2, 3)
    val modified = original.toMutableList().apply { add(4) }
    
  3. 多线程环境下特别注意

    • 不可变集合可安全共享
    • 可变集合需使用同步机制(如 Collections.synchronizedList())
  4. 注意集合的只读视图

    val mutable = mutableListOf(1, 2)
    val readOnlyView: List<Int> = mutable
    // readOnlyView.add(3)  // 编译错误
    mutable.add(3)         // 实际会影响readOnlyView
    

通过合理选择集合类型,可以编写出更安全、更高效的 Kotlin 代码。不可变集合在函数式编程风格中尤为重要,而可变集合在需要频繁修改的场景下不可或缺。

Last Updated:: 5/21/25, 7:58 PM