【2023】Kotlin教程
第二篇 面向对象与函数式编程
第15章 数据容器——数组和集合
在计算机程序中会有很多数据,这些数据也需要一个容器将它们管理起来,这就是数据容器。
数据容器本质是基于某种数据结构,常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。
Kotlin中数据容器主要分为数组和集合。
15.3 Set集合
Set集合是由一串无序的,不能重复的相同类型元素构成的集合。
Set集合的接口分为不可变集合kotlin.collections.Set和可变集合kotlin.collections.MutableSet,以及Java提供的实现类java.util.HashSet。.
15.3.1 不可变Set集合
创建不可变Set集合可以使用工厂函数setOf,它有三个版本:
- setOf()。创建空的不可变Set集合。
- setOf(element::T)。创建单个元素的不可变Set集合。
- setOf(vararg elements:T)。创建多个元素的不可变Set集合,vararg表明参数个数是可变的。
不可变Set集合接口是kotlin.collections.Set,它也继承自Collection接口,kotlin.collections.Set提供了一些集合操作函数和属性如下:
- isEmpty()函数。判断Set集合中是否有元素,没有返回true,有则返回false。该函数是从Collection 集合继承过来的。与isEmpty()函数相反的函数是isNotEmpty(),
- contains(element:E)函数。判断Set集合中是否包含指定元素,包含返true,不包含返回false。该函数是从Collection集合继承过来的。
- iterator()函数。返回迭代器(Iterator)对象,迭代器对象用于遍历集合。该函数是从Collection集合继承过来的。
- size属性。返回Set集合中的元素个数,返回值是Int类型。该属性是从Collection集合继承过来的。
举个栗子:
package com.dingjiaxiong
fun main() {
val set1 = setOf("ABC")
val set2 = setOf<Long?>()
val set3 = setOf(1, 3, 34, 54, 75)
println(set1.size)
println(set2.isEmpty())
println(set3.contains(75))
// 使用for 循环遍历
println("=== 1. 使用for循环遍历 === ")
for (item in set3) {
print(item)
print(" ")
}
println()
// 使用迭代器遍历
println("=== 2. 使用迭代器遍历 === ")
val it = set3.iterator()
while (it.hasNext()) {
val item = it.next()
print(item)
print(" ")
}
}
set3.iterator()
函数可以返回迭代器对象。之后调用迭代器hasNext()函数可以判断集合中是否还有元素可以迭代,有返回true,没有返回false。调用迭代器的next()返回迭代的下一个元素。