Kotlin - 集合



Kotlin 集合是一个无序的项目集合。Kotlin 集合可以是可变的(mutableSetOf)或只读的(setOf)。Kotlin 可变或不可变集合不允许包含重复元素。

创建 Kotlin 集合

对于集合创建,请使用标准库函数 setOf() 用于只读集合,mutableSetOf() 用于可变集合。

可以通过将其转换为 Set 来获得可变集合的只读视图。

示例

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    println(theSet)
    
    val theMutableSet = mutableSetOf("one", "two", "three", "four")
    println(theMutableSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[one, two, three, four]
[one, two, three, four]

遍历 Kotlin 集合

有多种方法可以遍历 Kotlin 集合。让我们逐一学习它们

使用 toString() 函数

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    println(theSet.toString())
}

运行上述 Kotlin 程序时,将生成以下输出

[one, two, three, four]

使用迭代器

fun main() {
    val theSet = setOf("one", "two", "three", "four")
    
   val itr = theSet.asIterable().iterator()
    while (itr.hasNext()) {
        println(itr.next())
    }
}

运行上述 Kotlin 程序时,将生成以下输出

one
two
three
four

使用 for 循环

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   for (i in theSet.indices) {
      println(theSet.elementAt(i))
   }
}

运行上述 Kotlin 程序时,将生成以下输出

one
two
three
four

使用 forEach

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   theSet.forEach { println(it) }
}

运行上述 Kotlin 程序时,将生成以下输出

one
two
three
four
注意 - 此处 it 的作用类似于 Java 中的 this 运算符。

Kotlin 集合的大小

我们可以使用 size 属性来获取集合中元素的总数

fun main() {
    val theSet = setOf("one", "two", null, "four", "five")
    
    println("Size of the Set " + theSet.size)
}

运行上述 Kotlin 程序时,将生成以下输出

Size of the Set 5

“in”运算符

in 运算符可用于检查集合中是否存在元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   if("two" in theSet){
      println(true)
   }else{
      println(false)
   }
}

运行上述 Kotlin 程序时,将生成以下输出

true

contain() 方法

contain() 方法也可用于检查集合中是否存在元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")

   if(theSet.contains("two")){
      println(true)
   }else{
      println(false)
   }
    
}

运行上述 Kotlin 程序时,将生成以下输出

true

isEmpty() 方法

如果集合为空(不包含任何元素),则 isEmpty() 方法返回 true,否则返回 false。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   if(theSet.isEmpty()){
      println(true)
   }else{
      println(false)
   }
}

运行上述 Kotlin 程序时,将生成以下输出

false

indexOf() 方法

indexOf() 方法返回集合中指定元素第一次出现的索引,如果集合中不包含指定元素,则返回 -1。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")
    
   println("Index of 'two' -  " + theSet.indexOf("two"))
}

运行上述 Kotlin 程序时,将生成以下输出

Index of 'two' -  1

elementAt() 方法

elementAt() 方法可用于获取集合中指定索引处的元素。

示例

fun main() {
   val theSet = setOf("one", "two", "three", "four")

   println("Element at 3rd position " + theSet.elementAt(2))
}

运行上述 Kotlin 程序时,将生成以下输出

Element at 3rd position three

集合添加

我们可以使用 + 运算符将两个或多个集合添加到单个集合中。这会将第二个集合添加到第一个集合中,并丢弃重复的元素。

示例

fun main() {
    val firstSet = setOf("one", "two", "three")
    val secondSet = setOf("one", "four", "five", "six")
    val resultSet = firstSet + secondSet
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[one, two, three, four, five, six]

集合减法

我们可以使用 - 运算符从另一个集合中减去一个集合。此操作将从第一个集合中删除公共元素,并返回结果。

示例

fun main() {
    val firstSet = setOf("one", "two", "three")
    val secondSet = setOf("one", "five", "six")
    val resultSet = firstSet - secondSet
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[two, three]

移除集合中的 null

我们可以使用 filterNotNull() 方法从集合中移除 null 元素。

fun main() {
    val theSet = setOf("one", "two", null, "four", "five")
    val resultSet = theSet.filterNotNull()
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[one, two, four, five]

排序元素

我们可以使用 sorted() 方法按升序排序元素,或使用 sortedDescending() 方法按降序排序集合元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    var resultSet = theSet.sorted()
    println(resultSet)
    
    resultSet = theSet.sortedDescending()
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[-1, 0, 10, 20, 30, 31, 40, 50]
[50, 40, 31, 30, 20, 10, 0, -1]

过滤元素

我们可以使用 filter() 方法过滤掉与给定谓词匹配的元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultSet = theSet.filter{ it > 30}
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[31, 40, 50]

删除前 N 个元素

我们可以使用 drop() 方法删除集合中的前 N 个元素。

fun main() {
    val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultSet = theSet.drop(3)
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[31, 40, 50, -1, 0]

分组集合元素

我们可以使用 groupBy() 方法对与给定谓词匹配的元素进行分组。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.groupBy{ it % 3}
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

{1=[10, 31, 40], 0=[12, 30, 9, -3, 0]}

映射集合元素

我们可以使用 map() 方法使用提供的函数映射所有元素。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.map{ it / 3 }
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[3, 4, 10, 10, 13, 3, -1, 0]

集合元素分块

我们可以使用 chunked() 方法从集合中创建给定大小的块。根据集合中元素的总数,最后一个块的元素数量可能不等于块大小。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.chunked(3)
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [31, 40, 9], [-3, 0]]

集合元素窗口化

我们可以使用 windowed() 方法通过在元素集合上移动给定大小的滑动窗口来创建元素范围集合。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.windowed(3)
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [12, 30, 31], [30, 31, 40], [31, 40, 9], [40, 9, -3], [9, -3, 0]]

默认情况下,滑动窗口每次移动一步,但我们可以通过传递自定义步长值来更改它。

fun main() {
    val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultSet = theSet.windowed(3, 3)
    
    println(resultSet)
}

运行上述 Kotlin 程序时,将生成以下输出

[[10, 12, 30], [31, 40, 9]]

Kotlin 可变集合

我们可以使用 mutableSetOf() 创建可变集合,之后我们可以使用 add() 向同一个集合中添加更多元素,并可以使用 remove() 方法从集合中删除元素。

fun main() {
    val theSet = mutableSetOf(10, 20, 30)
    
    theSet.add(40)
    theSet.add(50)
    println(theSet)
    
    theSet.remove(10)
    theSet.remove(30)
    println(theSet)
    
}

运行上述 Kotlin 程序时,将生成以下输出

[10, 20, 30, 40, 50]
[20, 40, 50]

测验时间 (面试和考试准备)

问题 1 - 我们可以将可变 Kotlin 集合设为不可变的吗?

A - 是的

B - 否

答案:A

解释

是的,我们可以通过将其转换为 Set 来将可变集合转换为不可变集合。

问题 2 - 我们可以使用 + 运算符添加两个或多个集合并创建一个单个集合。

A - 正确

B - 错误

答案:A

解释

是的,我们可以添加或减去两个 Kotlin 集合并生成第三个集合。加号的作用类似于集合的 union()

问题 2 - 哪个方法将返回给定 Kotlin 集合索引中的项目?

A - get()

B - elementAt()

C - 使用集合变量直接索引

D - 以上都不是

答案:B

解释

elementAt() 方法用于从给定索引获取列表元素。

广告