跳转到内容

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的集合接口继承关系如下:

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

集合的创建与基本操作[编辑 | 编辑源代码]

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代码!