跳转到内容

Kotlin集合

来自代码酷

Kotlin的集合(Collections)是处理数据结构的核心工具,提供了高效、类型安全的方式来存储和操作数据组。Kotlin集合基于Java集合框架,但通过扩展函数和不可变/可变设计增强了功能。本文将全面介绍Kotlin集合的分类、操作及实际应用。

概述[编辑 | 编辑源代码]

Kotlin集合分为两大类:

  • **不可变集合(Immutable Collections)**:创建后内容不可修改(如`List`、`Set`、`Map`的默认接口)。
  • **可变集合(Mutable Collections)**:支持动态增删元素(如`MutableList`、`MutableSet`、`MutableMap`)。

Kotlin通过扩展函数(如`filter`、`map`)为集合提供函数式编程支持。

集合分类[编辑 | 编辑源代码]

1. 列表(List)[编辑 | 编辑源代码]

列表是有序集合,允许重复元素。

不可变列表示例:

  
val colors: List<String> = listOf("Red", "Green", "Blue")  
println(colors[1])  // 输出: Green

可变列表示例:

  
val mutableColors: MutableList<String> = mutableListOf("Red", "Green")  
mutableColors.add("Blue")  
println(mutableColors)  // 输出: [Red, Green, Blue]

2. 集合(Set)[编辑 | 编辑源代码]

集合是无序且不重复的集合。

不可变集合示例:

  
val uniqueNumbers: Set<Int> = setOf(1, 2, 3, 3)  
println(uniqueNumbers)  // 输出: [1, 2, 3]

3. 映射(Map)[编辑 | 编辑源代码]

映射存储键值对,键唯一。

不可变映射示例:

  
val capitals: Map<String, String> = mapOf("USA" to "Washington", "France" to "Paris")  
println(capitals["France"])  // 输出: Paris

集合操作[编辑 | 编辑源代码]

Kotlin提供丰富的操作函数:

  • 过滤:`filter { it > 2 }`
  • 映射:`map { it * 2 }`
  • 聚合:`sum()`, `average()`

示例:

  
val numbers = listOf(1, 2, 3, 4)  
val evenSquares = numbers.filter { it % 2 == 0 }.map { it * it }  
println(evenSquares)  // 输出: [4, 16]

实际案例[编辑 | 编辑源代码]

场景:统计文本词频

  
fun countWords(text: String): Map<String, Int> {  
    return text.split("\\s+".toRegex())  
        .groupingBy { it }  
        .eachCount()  
}  

val result = countWords("hello world hello kotlin")  
println(result)  // 输出: {hello=2, world=1, kotlin=1}

性能考虑[编辑 | 编辑源代码]

使用集合时需注意:

  • 链式操作(如`filter.map`)会创建中间集合,可用`序列(Sequence)`优化。
  • 频繁增删时选择`LinkedList`(通过`java.util.LinkedList`)。

序列示例:

  
val largeList = (1..1_000_000).toList()  
val result = largeList.asSequence().filter { it % 2 == 0 }.map { it * 2 }.toList()

可视化:集合层次结构[编辑 | 编辑源代码]

classDiagram Collection <|-- List Collection <|-- Set Collection <|-- Map List <|-- MutableList Set <|-- MutableSet Map <|-- MutableMap

总结[编辑 | 编辑源代码]

Kotlin集合通过不可变/可变设计和扩展函数,提供了安全且灵活的数据操作方式。掌握集合的分类、操作及性能优化技巧,能显著提升代码质量。