Kotlin集合框架
外观
Kotlin集合框架[编辑 | 编辑源代码]
Kotlin的集合框架是处理数据集合的核心工具,它提供了一组丰富的接口和类,用于存储、操作和遍历数据。Kotlin的集合分为两大类:**不可变集合(Immutable Collections)**和**可变集合(Mutable Collections)**。此外,Kotlin的集合框架与Java的集合库高度兼容,但提供了更简洁、安全的API。
集合的分类[编辑 | 编辑源代码]
Kotlin的集合主要分为以下三类:
1. **List(列表)**:有序集合,可包含重复元素。 2. **Set(集合)**:无序集合,不包含重复元素。 3. **Map(映射)**:键值对集合,键唯一。
每种类型又分为**不可变**和**可变**版本:
- 不可变集合(如 `List`, `Set`, `Map`)在创建后不能修改。
- 可变集合(如 `MutableList`, `MutableSet`, `MutableMap`)允许动态增删元素。
集合层次结构[编辑 | 编辑源代码]
Kotlin的集合接口继承关系如下:
集合的创建与基本操作[编辑 | 编辑源代码]
Kotlin提供了多种方式来创建集合:
不可变集合[编辑 | 编辑源代码]
// 不可变List
val numbers = listOf(1, 2, 3, 4, 5)
// 不可变Set
val uniqueNumbers = setOf(1, 2, 3, 2) // 重复的2会被忽略
// 不可变Map
val ages = mapOf("Alice" to 25, "Bob" to 30)
可变集合[编辑 | 编辑源代码]
// 可变List
val mutableNumbers = mutableListOf(1, 2, 3)
mutableNumbers.add(4) // 添加元素
// 可变Set
val mutableUniqueNumbers = mutableSetOf(1, 2, 3)
mutableUniqueNumbers.add(2) // 无效果,因为2已存在
// 可变Map
val mutableAges = mutableMapOf("Alice" to 25)
mutableAges["Bob"] = 30 // 添加新键值对
常用集合操作[编辑 | 编辑源代码]
Kotlin提供了丰富的扩展函数来操作集合,例如:
过滤(Filter)[编辑 | 编辑源代码]
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // 输出: [2, 4]
映射(Map)[编辑 | 编辑源代码]
val names = listOf("Alice", "Bob", "Charlie")
val nameLengths = names.map { it.length }
println(nameLengths) // 输出: [5, 3, 7]
排序(Sort)[编辑 | 编辑源代码]
val unsorted = listOf(3, 1, 4, 2)
val sorted = unsorted.sorted()
println(sorted) // 输出: [1, 2, 3, 4]
分组(GroupBy)[编辑 | 编辑源代码]
val words = listOf("apple", "banana", "avocado", "cherry")
val groupedByFirstLetter = words.groupBy { it.first() }
println(groupedByFirstLetter)
// 输出: {a=[apple, avocado], b=[banana], c=[cherry]}
实际应用案例[编辑 | 编辑源代码]
假设我们有一个学生成绩管理系统,需要统计不同班级的平均分:
data class Student(val name: String, val classId: Int, val score: Int)
val students = listOf(
Student("Alice", 1, 90),
Student("Bob", 1, 85),
Student("Charlie", 2, 92),
Student("Dave", 2, 88)
)
// 按班级分组并计算平均分
val averageScores = students
.groupBy { it.classId }
.mapValues { (_, students) ->
students.map { it.score }.average()
}
println(averageScores) // 输出: {1=87.5, 2=90.0}
性能考虑[编辑 | 编辑源代码]
Kotlin的集合操作通常是**惰性求值**(Lazy Evaluation)的,例如 `Sequence` 可以优化链式操作:
val result = (1..1_000_000)
.asSequence() // 使用序列提高性能
.filter { it % 2 == 0 }
.map { it * 2 }
.take(10)
.toList()
println(result) // 输出前10个符合条件的数
总结[编辑 | 编辑源代码]
Kotlin的集合框架提供了强大且易用的API,适用于各种数据处理场景。关键点包括:
- 区分不可变和可变集合。
- 熟练使用 `filter`、`map`、`groupBy` 等操作。
- 在大型数据集上优先使用 `Sequence` 优化性能。
通过合理使用集合框架,可以编写出简洁、高效的Kotlin代码!