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}
社交网络关系[编辑 | 编辑源代码]
使用Map
和Set
表示用户关系:
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
表达式处理不同类型集合