跳转到内容

Kotlin数据结构操作

来自代码酷


Kotlin数据结构操作是Kotlin编程中处理和组织数据的基础技术。本指南将全面介绍Kotlin标准库中提供的主要数据结构及其操作方法,涵盖列表、集合、映射等核心类型,并通过实际案例展示其应用场景。

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

Kotlin的数据结构操作基于标准库(kotlin.collections)实现,提供了一组高效且类型安全的API。这些操作可分为两类:

  • 不可变数据结构 - 创建后内容不可修改(如List, Set, Map
  • 可变数据结构 - 支持动态修改(如MutableList, MutableSet, MutableMap

核心数据结构[编辑 | 编辑源代码]

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

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

不可变列表示例

val numbers = listOf(1, 2, 3)
println(numbers[1])  // 输出: 2

可变列表操作

val mutableNumbers = mutableListOf("A", "B")
mutableNumbers.add("C")  // 添加元素
mutableNumbers.removeAt(0)  // 删除索引0的元素
println(mutableNumbers)  // 输出: [B, C]

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

无序集合,不允许重复元素。

集合运算示例

val setA = setOf(1, 2, 3)
val setB = setOf(3, 4, 5)
println(setA union setB)  // 并集: [1, 2, 3, 4, 5]
println(setA intersect setB)  // 交集: [3]

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

键值对集合,键唯一。

映射操作示例

val capitals = mapOf("China" to "Beijing", "Japan" to "Tokyo")
println(capitals["China"])  // 输出: Beijing

val mutableCapitals = capitals.toMutableMap()
mutableCapitals["France"] = "Paris"
println(mutableCapitals)  // 输出: {China=Beijing, Japan=Tokyo, France=Paris}

常用操作[编辑 | 编辑源代码]

Kotlin为集合提供了丰富的扩展函数:

转换操作[编辑 | 编辑源代码]

val numbers = listOf(1, 2, 3)
val squared = numbers.map { it * it }  // [1, 4, 9]
val evenOnly = numbers.filter { it % 2 == 0 }  // [2]

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

val sum = numbers.reduce { acc, i -> acc + i }  // 6
val max = numbers.maxOrNull()  // 3

分组操作[编辑 | 编辑源代码]

val words = listOf("apple", "banana", "avocado")
val byLetter = words.groupBy { it.first() }
// 输出: {'a'=["apple", "avocado"], 'b'=["banana"]}

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

不同数据结构的时间复杂度(大O表示法):

时间复杂度比较
操作 ArrayList LinkedList HashSet
按索引访问 O(1) O(n) N/A
插入元素 O(n) O(1) O(1)
查找元素 O(n) O(n) O(1)

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

购物车系统[编辑 | 编辑源代码]

使用MutableMap实现商品计数:

val cart = mutableMapOf<String, Int>()
fun addToCart(item: String) {
    cart[item] = cart.getOrDefault(item, 0) + 1
}
addToCart("Apple")
addToCart("Apple")
addToCart("Banana")
println(cart)  // 输出: {Apple=2, Banana=1}

社交网络关系[编辑 | 编辑源代码]

使用MapSet表示用户关系:

graph LR A[User1] -->|follows| B[User2] A -->|follows| C[User3] B -->|follows| C

val socialGraph = mutableMapOf<String, MutableSet<String>>()
fun follow(follower: String, target: String) {
    socialGraph.getOrPut(follower) { mutableSetOf() }.add(target)
}
follow("User1", "User2")
follow("User1", "User3")
println(socialGraph["User1"])  // 输出: [User2, User3]

高级主题[编辑 | 编辑源代码]

序列(Sequence)[编辑 | 编辑源代码]

惰性求值的集合操作链,适合大数据处理:

val result = (1..1_000_000)
    .asSequence()
    .filter { it % 2 == 0 }
    .map { it * 2 }
    .take(10)
    .toList()
// 只处理必要元素,避免中间集合创建

自定义数据结构[编辑 | 编辑源代码]

实现栈数据结构示例:

class Stack<T> {
    private val elements = mutableListOf<T>()
    fun push(item: T) = elements.add(item)
    fun pop(): T = elements.removeAt(elements.size - 1)
    fun peek(): T = elements.last()
}

最佳实践[编辑 | 编辑源代码]

1. 优先使用不可变集合,除非需要修改 2. 根据操作需求选择数据结构(频繁查找用HashSet/HashMap) 3. 大数据集考虑使用Sequence避免中间集合 4. 使用when表达式处理不同类型集合

参见[编辑 | 编辑源代码]