Kotlin 集合概述 #
一、集合类型 #
Kotlin 提供三种基本集合类型:
| 类型 | 描述 | 特点 |
|---|---|---|
| List | 有序集合 | 可重复,按索引访问 |
| Set | 无序集合 | 不可重复 |
| Map | 键值对集合 | 键唯一 |
二、只读与可变集合 #
2.1 只读集合 #
kotlin
// 只读 List
val readOnlyList: List<Int> = listOf(1, 2, 3)
// 只读 Set
val readOnlySet: Set<Int> = setOf(1, 2, 3)
// 只读 Map
val readOnlyMap: Map<String, Int> = mapOf("a" to 1, "b" to 2)
2.2 可变集合 #
kotlin
// 可变 List
val mutableList: MutableList<Int> = mutableListOf(1, 2, 3)
mutableList.add(4)
// 可变 Set
val mutableSet: MutableSet<Int> = mutableSetOf(1, 2, 3)
mutableSet.add(4)
// 可变 Map
val mutableMap: MutableMap<String, Int> = mutableMapOf("a" to 1)
mutableMap["b"] = 2
2.3 类型关系 #
text
Collection (只读)
├── List
├── Set
└── Map (不是 Collection 的子接口)
MutableCollection (可变)
├── MutableList
├── MutableSet
└── MutableMap
三、创建集合 #
3.1 List #
kotlin
// 空列表
val empty = emptyList<Int>()
// 只读列表
val list = listOf(1, 2, 3)
// 可变列表
val mutable = mutableListOf(1, 2, 3)
// 使用 List 构造函数
val list2 = List(5) { it * 2 } // [0, 2, 4, 6, 8]
// ArrayList
val arrayList = arrayListOf(1, 2, 3)
3.2 Set #
kotlin
// 空集合
val empty = emptySet<Int>()
// 只读集合
val set = setOf(1, 2, 3)
// 可变集合
val mutable = mutableSetOf(1, 2, 3)
// LinkedHashSet(保持插入顺序)
val linked = linkedSetOf(1, 2, 3)
// TreeSet(排序)
val sorted = sortedSetOf(3, 1, 2) // [1, 2, 3]
// HashSet
val hash = hashSetOf(1, 2, 3)
3.3 Map #
kotlin
// 空映射
val empty = emptyMap<String, Int>()
// 只读映射
val map = mapOf("a" to 1, "b" to 2)
// 可变映射
val mutable = mutableMapOf("a" to 1, "b" to 2)
// LinkedHashMap(保持插入顺序)
val linked = linkedMapOf("a" to 1, "b" to 2)
// TreeMap(按键排序)
val sorted = sortedMapOf("c" to 3, "a" to 1, "b" to 2)
// HashMap
val hash = hashMapOf("a" to 1, "b" to 2)
四、集合转换 #
4.1 List 转换 #
kotlin
val list = listOf(1, 2, 3)
// 转为 Set
val set = list.toSet()
// 转为 MutableSet
val mutableSet = list.toMutableSet()
// 转为 Map
val map = list.associateBy { it }
4.2 Set 转换 #
kotlin
val set = setOf(1, 2, 3)
// 转为 List
val list = set.toList()
// 转为 MutableList
val mutableList = set.toMutableList()
4.3 Map 转换 #
kotlin
val map = mapOf("a" to 1, "b" to 2)
// 转为 List
val list = map.toList() // [(a, 1), (b, 2)]
// 获取键列表
val keys = map.keys.toList()
// 获取值列表
val values = map.values.toList()
五、集合判断 #
5.1 空判断 #
kotlin
val list = listOf<Int>()
list.isEmpty() // true
list.isNotEmpty() // false
list.empty() // true(Kotlin 1.3+)
5.2 包含判断 #
kotlin
val list = listOf(1, 2, 3)
list.contains(2) // true
2 in list // true
list.containsAll(listOf(1, 2)) // true
5.3 元素判断 #
kotlin
val list = listOf(1, 2, 3, 4, 5)
list.any { it > 3 } // true(存在满足条件的元素)
list.all { it > 0 } // true(所有元素满足条件)
list.none { it < 0 } // true(没有元素满足条件)
六、集合遍历 #
6.1 for 循环 #
kotlin
val list = listOf("A", "B", "C")
for (item in list) {
println(item)
}
for ((index, item) in list.withIndex()) {
println("$index: $item")
}
6.2 forEach #
kotlin
val list = listOf("A", "B", "C")
list.forEach { println(it) }
list.forEachIndexed { index, item ->
println("$index: $item")
}
6.3 迭代器 #
kotlin
val list = listOf(1, 2, 3)
val iterator = list.iterator()
while (iterator.hasNext()) {
println(iterator.next())
}
6.4 Map 遍历 #
kotlin
val map = mapOf("a" to 1, "b" to 2)
// 遍历键值对
for ((key, value) in map) {
println("$key -> $value")
}
// 遍历键
for (key in map.keys) {
println(key)
}
// 遍历值
for (value in map.values) {
println(value)
}
七、集合大小 #
kotlin
val list = listOf(1, 2, 3, 4, 5)
val set = setOf(1, 2, 3)
val map = mapOf("a" to 1, "b" to 2)
list.size // 5
set.size // 3
map.size // 2
八、集合比较 #
kotlin
val list1 = listOf(1, 2, 3)
val list2 = listOf(1, 2, 3)
val list3 = listOf(3, 2, 1)
list1 == list2 // true(内容相等)
list1 == list3 // false
val set1 = setOf(1, 2, 3)
val set2 = setOf(3, 2, 1)
set1 == set2 // true(Set 不关心顺序)
九、实战示例 #
9.1 数据分组 #
kotlin
data class Person(val name: String, val age: Int, val city: String)
val people = listOf(
Person("Alice", 25, "Beijing"),
Person("Bob", 30, "Shanghai"),
Person("Charlie", 25, "Beijing")
)
// 按城市分组
val byCity = people.groupBy { it.city }
// {Beijing=[Alice, Charlie], Shanghai=[Bob]}
// 按年龄分组
val byAge = people.groupBy { it.age }
// {25=[Alice, Charlie], 30=[Bob]}
9.2 数据统计 #
kotlin
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val stats = mapOf(
"count" to numbers.size,
"sum" to numbers.sum(),
"average" to numbers.average(),
"max" to numbers.maxOrNull()!!,
"min" to numbers.minOrNull()!!
)
9.3 数据过滤 #
kotlin
data class Product(val name: String, val price: Double, val category: String)
val products = listOf(
Product("Apple", 5.0, "Fruit"),
Product("Banana", 3.0, "Fruit"),
Product("Milk", 10.0, "Dairy")
)
// 过滤水果
val fruits = products.filter { it.category == "Fruit" }
// 价格大于 4 的产品
val expensive = products.filter { it.price > 4.0 }
十、最佳实践 #
10.1 优先使用只读集合 #
kotlin
// 推荐
val list: List<Int> = listOf(1, 2, 3)
// 只在需要修改时使用可变集合
val mutableList: MutableList<Int> = mutableListOf(1, 2, 3)
10.2 使用类型推断 #
kotlin
// 推荐
val list = listOf(1, 2, 3)
// 不推荐
val list: List<Int> = listOf(1, 2, 3)
10.3 使用扩展函数 #
kotlin
// 推荐
val result = list.filter { it > 0 }.map { it * 2 }
// 不推荐
val result = mutableListOf<Int>()
for (item in list) {
if (item > 0) {
result.add(item * 2)
}
}
十一、总结 #
集合类型:
| 类型 | 只读 | 可变 |
|---|---|---|
| List | List | MutableList |
| Set | Set | MutableSet |
| Map | Map | MutableMap |
下一步,让我们学习 List集合!
最后更新:2026-03-27