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