Mutable Set
Mutable Set

Mutable Set

提供方: JetBrains 学院

在前面的章节中,您已经熟悉了 Set 以及它与 MutableList 的区别。现在,我们将了解 MutableSet :它的使用场景和方式,以及它与 Set 和 MutableList 的具体区别。

介绍

MutableSet 是一个 无序的 元素集合,不允许重复元素。与 不可变的 Set 集合不同, MutableSet 是 可变 的,可以自由地添加和删除元素。

想象一下,你正在列一张需要购买的食品杂货清单:

val groceries = setOf("Banana", "Strawberry")
println(groceries) // [Banana, Strawberry]

但如果您之后想起需要添加更多元素呢?这正是 MutableSet MutableSet 用武之地。MutableSet 支持添加元素:

val groceries = mutableSetOf("Banana", "Strawberry")
groceries.add("Water")
println(groceries) // [Banana, Strawberry, Water]

你可能会问:为什么不直接使用 MutableList 呢?与 MutableSet 不同, MutableList 允许存在重复项:

val groceries = mutableSetOf("Banana", "Banana", "Strawberry")
println(groceries) // [Banana, Strawberry]

val secondGroceries = mutableListOf("Banana", "Banana", "Strawberry")
println(secondGroceries) // [Banana, Banana, Strawberry]

创建 MutableSet

你可以按以下方式初始化 MutableSet :

val students = mutableSetOf("Joe", "Elena", "Bob")
println(students) // [Joe, Elena, Bob]

在这里,我们甚至不需要指定对象的类型,因为它可以从上下文中推导出来。但是请注意,如果您创建一个空的 MutableSet ,则必须指定类型:

val points = mutableSetOf<Int>()
println(points) // []

您还可以借助 toMutableSet() 函数将 Set 转换为 MutableSet :

val students = setOf("Joe", "Elena", "Bob").toMutableSet()
students.add("Bob")
println(students) // [Joe, Elena, Bob]

添加元素

MutableSet 与 Set 具有相同的属性和方法: size 、 isEmpty() 、 indexOf(element) 、 contains(element) 、 first() 、 last() 等。

此外, MutableSet 还提供了用于更改其内容的附加功能:

  • add(element) 是一个将指定元素添加到集合中的方法;
  • addAll(elements) 将指定集合中的所有元素添加到集合中。

我们来看一个例子。假设你和同事搭档,任务是快速准确地记下录音内容。你们决定一起转录,然后合并结果,具体流程如下:

val words = mutableSetOf<String>("Apple", "Coke")
val friendsWords = mutableSetOf<String>("Banana", "Coke")

words.add("Phone")
words.add("Controller")

friendsWords.add("Phone")
friendsWords.add("Pasta")
friendsWords.add("Pizza")

words.addAll(friendsWords)

println(words) // [Apple, Coke, Phone, Controller, Banana, Pasta, Pizza]

移除元素

您可能还需要从集合中移除部分或全部元素。让我们看看该如何操作。

  • remove(element) 删除指定的元素;
  • clear() 从当前集合中移除所有元素;
  • removeAll(elements) 会移除所有也包含在指定集合中的元素(参见下面的示例)。
val groceries = mutableSetOf("Apple", "Water", "Banana", "Pen")

groceries.remove("Apple")
println(groceries) // [Water, Banana, Pen]

val uselessGroceries = setOf("Banana", "Pen")
groceries.removeAll(uselessGroceries)
println(groceries) // [Water]

groceries.clear()
println(groceries) // []

当然, MutableSet 还有许多其他有用的方法:请访问 kotlinlang.org 并熟悉它们!

遍历元素

您可以使用 for 循环遍历 MutableSet 中的元素。以下是一个简单的示例:

val places = mutableSetOf("Saint-Petersburg", "Moscow", "Grodno", "Rome")

for (place in places) {
    println(place)
}

// Saint-Petersburg
// Moscow
// Grodno
// Rome

结论

现在您了解了 Set 和 MutableSet 的区别。Set 是一个 不可变 Set ,因此当您不希望其内容发生变化时,使用它很合适。如果您希望内容发生变化,那么 MutableSet 是更好的选择,现在您也知道如何初始化它、添加和删除元素以及遍历它们。请注意,如果您是一位经验丰富的程序员,您也可以使用不可变集合来解决本主题中的问题,但由于我们只是在学习阶段,所以请使用。

196 名学习者喜欢这篇理论文章, 2 名学习者不喜欢。 你呢?

报告拼写错误

相关条目

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注