Kotlin数据结构性能全解析
Kotlin 数据结构分析
1. 列表(List)
- 特性:
- 有序集合,允许重复元素
- 不可变:
listOf() - 可变:
mutableListOf()(默认实现为ArrayList)
- 时间复杂度:
- 随机访问:O(1)O(1)O(1)
- 末尾插入:O(1)O(1)O(1)(摊销时间)
- 中间插入/删除:O(n)O(n)O(n)
- 使用场景:
val immutableList = listOf("A", "B", "C") // 只读 val mutableList = mutableListOf(1, 2, 3) mutableList.add(4) // 动态修改
2. 集合(Set)
- 特性:
- 无序,元素唯一(基于
hashCode()和equals()) - 不可变:
setOf() - 可变:
mutableSetOf()(默认LinkedHashSet)
- 无序,元素唯一(基于
- 变体:
HashSet:无序,最快操作LinkedHashSet:保留插入顺序TreeSet:有序(基于红黑树)
- 时间复杂度:
- 添加/删除/查找:平均 O(1)O(1)O(1)(
HashSet),最坏 O(n)O(n)O(n) TreeSet操作:O(logn)O(\log n)O(logn)
- 添加/删除/查找:平均 O(1)O(1)O(1)(
- 使用场景:
val uniqueNumbers = setOf(1, 2, 2, 3) // 结果为 [1, 2, 3]
3. 映射(Map)
- 特性:
- 键值对集合,键唯一
- 不可变:
mapOf() - 可变:
mutableMapOf()(默认LinkedHashMap)
- 变体:
HashMap:无序,高效哈希LinkedHashMap:保留插入顺序TreeMap:按键排序
- 时间复杂度:
- 添加/删除/查找:平均 O(1)O(1)O(1)(
HashMap) TreeMap操作:O(logn)O(\log n)O(logn)
- 添加/删除/查找:平均 O(1)O(1)O(1)(
- 使用场景:
val map = mapOf("Kotlin" to 2011, "Java" to 1995) val mutableMap = mutableMapOf("A" to 1) mutableMap["B"] = 2 // 动态添加
4. 数组(Array)
- 特性:
- 固定大小,类型确定(如
Array<T>、IntArray) - 高效内存布局(原始类型数组无装箱开销)
- 固定大小,类型确定(如
- 时间复杂度:
- 访问/修改:O(1)O(1)O(1)
- 大小调整:不支持(需创建新数组)
- 使用场景:
val intArray = intArrayOf(1, 2, 3) // 原始类型数组 val objArray = arrayOf("A", "B") // 对象数组
5. 序列(Sequence)
- 特性:
- 惰性求值(类似 Java Stream)
- 无中间集合生成(节省内存)
- 时间复杂度:
- 操作链:O(n)O(n)O(n)(单次遍历)
- 使用场景:大数据处理管道
val result = (1..1_000_000).asSequence().filter { it % 2 == 0 }.map { it * 2 }.take(10).toList() // 仅计算前10个元素
性能对比总结
| 数据结构 | 随机访问 | 插入/删除 | 内存开销 | 适用场景 |
|---|---|---|---|---|
ArrayList | O(1)O(1)O(1) | O(n)O(n)O(n) | 低 | 高频访问,少修改 |
HashSet | O(1)O(1)O(1) | O(1)O(1)O(1) | 中 | 快速去重 |
HashMap | O(1)O(1)O(1) | O(1)O(1)O(1) | 中 | 键值查询 |
Array | O(1)O(1)O(1) | 不支持 | 最低 | 固定大小数据 |
Sequence | O(n)O(n)O(n) | 不支持 | 极低 | 大数据流处理 |
设计原则:
- 优先选择不可变集合(线程安全)
- 高频修改用
Mutable变体- 大数据操作用
Sequence避免中间集合
