Kotlin Set 集合 #
一、创建 Set #
1.1 只读 Set #
kotlin
// 使用 setOf
val set = setOf(1, 2, 3, 4, 5)
// 空集合
val empty = emptySet<Int>()
// 使用 LinkedHashSet(保持插入顺序)
val linked = linkedSetOf(1, 2, 3)
// 使用 TreeSet(排序)
val sorted = sortedSetOf(3, 1, 2) // [1, 2, 3]
// 使用 HashSet
val hash = hashSetOf(1, 2, 3)
1.2 可变 Set #
kotlin
// 使用 mutableSetOf
val mutable = mutableSetOf(1, 2, 3)
// 使用 hashSetOf
val hash = hashSetOf(1, 2, 3)
// 使用 linkedSetOf
val linked = linkedSetOf(1, 2, 3)
// 使用 sortedSetOf
val sorted = sortedSetOf(1, 2, 3)
二、Set 特点 #
2.1 元素唯一 #
kotlin
val set = setOf(1, 2, 2, 3, 3, 3)
println(set) // [1, 2, 3]
val mutable = mutableSetOf(1, 2, 3)
mutable.add(2) // 添加失败,元素已存在
mutable.add(4) // 添加成功
println(mutable) // [1, 2, 3, 4]
2.2 无序性 #
kotlin
// HashSet 不保证顺序
val hashSet = hashSetOf(3, 1, 2)
// 顺序可能不同
// LinkedHashSet 保持插入顺序
val linkedSet = linkedSetOf(3, 1, 2)
// [3, 1, 2]
// TreeSet 排序
val treeSet = sortedSetOf(3, 1, 2)
// [1, 2, 3]
三、添加元素 #
3.1 添加单个元素 #
kotlin
val set = mutableSetOf(1, 2, 3)
set.add(4) // true,添加成功
set.add(2) // false,元素已存在
// [1, 2, 3, 4]
3.2 添加多个元素 #
kotlin
val set = mutableSetOf(1, 2, 3)
set.addAll(setOf(4, 5, 6))
// [1, 2, 3, 4, 5, 6]
3.3 使用 + 操作符 #
kotlin
val set = setOf(1, 2, 3)
val newSet = set + 4 // [1, 2, 3, 4]
val newSet2 = set + setOf(4, 5) // [1, 2, 3, 4, 5]
四、删除元素 #
4.1 删除指定元素 #
kotlin
val set = mutableSetOf(1, 2, 3, 4, 5)
set.remove(3) // true,删除成功
set.remove(10) // false,元素不存在
// [1, 2, 4, 5]
4.2 条件删除 #
kotlin
val set = mutableSetOf(1, 2, 3, 4, 5)
set.removeAll { it > 3 } // 删除所有大于 3 的元素
// [1, 2, 3]
set.retainAll { it > 1 } // 保留大于 1 的元素
// [2, 3]
4.3 清空集合 #
kotlin
val set = mutableSetOf(1, 2, 3)
set.clear()
// []
4.4 使用 - 操作符 #
kotlin
val set = setOf(1, 2, 3, 4, 5)
val newSet = set - 3 // [1, 2, 4, 5]
val newSet2 = set - setOf(1, 2) // [3, 4, 5]
五、集合运算 #
5.1 并集 #
kotlin
val set1 = setOf(1, 2, 3)
val set2 = setOf(3, 4, 5)
val union = set1.union(set2) // [1, 2, 3, 4, 5]
// 或使用 + 操作符
val union2 = set1 + set2 // [1, 2, 3, 4, 5]
5.2 交集 #
kotlin
val set1 = setOf(1, 2, 3, 4)
val set2 = setOf(3, 4, 5, 6)
val intersect = set1.intersect(set2) // [3, 4]
5.3 差集 #
kotlin
val set1 = setOf(1, 2, 3, 4)
val set2 = setOf(3, 4, 5, 6)
val subtract = set1.subtract(set2) // [1, 2]
// 或使用 - 操作符
val subtract2 = set1 - set2 // [1, 2]
5.4 对称差集 #
kotlin
val set1 = setOf(1, 2, 3, 4)
val set2 = setOf(3, 4, 5, 6)
// (A - B) ∪ (B - A)
val symmetricDiff = (set1 - set2) union (set2 - set1)
// [1, 2, 5, 6]
六、判断操作 #
6.1 包含判断 #
kotlin
val set = setOf(1, 2, 3, 4, 5)
set.contains(3) // true
3 in set // true
set.containsAll(setOf(1, 2)) // true
6.2 子集判断 #
kotlin
val set1 = setOf(1, 2, 3)
val set2 = setOf(1, 2, 3, 4, 5)
set1.containsAll(set2) // false
set2.containsAll(set1) // true(set1 是 set2 的子集)
6.3 相交判断 #
kotlin
val set1 = setOf(1, 2, 3)
val set2 = setOf(3, 4, 5)
set1.any { it in set2 } // true(有交集)
6.4 判空 #
kotlin
val set = setOf<Int>()
set.isEmpty() // true
set.isNotEmpty() // false
七、查找元素 #
7.1 获取元素 #
kotlin
val set = setOf(1, 2, 3, 4, 5)
set.first() // 1
set.last() // 5
set.firstOrNull() // 1
set.lastOrNull() // 5
// 条件查找
set.find { it > 3 } // 4
7.2 随机元素 #
kotlin
val set = setOf(1, 2, 3, 4, 5)
set.random() // 随机元素
set.randomOrNull() // 随机元素或 null
八、遍历 Set #
8.1 for 循环 #
kotlin
val set = setOf("A", "B", "C")
for (item in set) {
println(item)
}
8.2 forEach #
kotlin
val set = setOf("A", "B", "C")
set.forEach { println(it) }
8.3 迭代器 #
kotlin
val set = setOf(1, 2, 3)
val iterator = set.iterator()
while (iterator.hasNext()) {
println(iterator.next())
}
九、转换操作 #
9.1 转换为 List #
kotlin
val set = setOf(1, 2, 3)
val list = set.toList()
val mutableList = set.toMutableList()
9.2 转换为其他 Set #
kotlin
val set = setOf(3, 1, 2)
val linkedSet = set.toMutableSet() // LinkedHashSet
val sortedSet = set.toSortedSet() // TreeSet
9.3 map 操作 #
kotlin
val set = setOf(1, 2, 3)
val doubled = set.map { it * 2 } // [2, 4, 6]
val newSet = set.mapTo(mutableSetOf()) { it * 2 }
十、实战示例 #
10.1 去重 #
kotlin
val list = listOf(1, 2, 2, 3, 3, 3, 4)
val unique = list.toSet() // {1, 2, 3, 4}
val uniqueList = list.toSet().toList() // [1, 2, 3, 4]
10.2 查找共同元素 #
kotlin
fun findCommon(list1: List<Int>, list2: List<Int>): Set<Int> {
return list1.toSet().intersect(list2.toSet())
}
val common = findCommon(
listOf(1, 2, 3, 4),
listOf(3, 4, 5, 6)
)
// {3, 4}
10.3 标签系统 #
kotlin
class TagSystem {
private val tags = mutableSetOf<String>()
fun addTag(tag: String) {
tags.add(tag.lowercase())
}
fun removeTag(tag: String) {
tags.remove(tag.lowercase())
}
fun hasTag(tag: String): Boolean {
return tag.lowercase() in tags
}
fun getAllTags(): Set<String> = tags.toSet()
}
val system = TagSystem()
system.addTag("Kotlin")
system.addTag("kotlin") // 不会重复添加
system.hasTag("KOTLIN") // true
十一、Set 实现类选择 #
| 实现类 | 特点 | 适用场景 |
|---|---|---|
| HashSet | 高性能,无序 | 默认选择 |
| LinkedHashSet | 保持插入顺序 | 需要顺序 |
| TreeSet | 排序 | 需要排序 |
十二、总结 #
Set 常用操作:
| 操作 | 方法 |
|---|---|
| 添加 | add, addAll |
| 删除 | remove, removeAll |
| 包含 | contains, in |
| 并集 | union, + |
| 交集 | intersect |
| 差集 | subtract, - |
下一步,让我们学习 Map集合!
最后更新:2026-03-27