Kotlin Set 接口

2024年8月29日 | 阅读 7 分钟

Kotlin 的 Set 接口 是一个通用的无序集合。Set 接口不支持重复元素。该接口本质上是不可变的,其方法支持集合的只读功能。

Set 接口使用 setOf() 函数创建 Set 接口的对象列表,该列表包含元素列表。

Set 接口声明

Set 接口的属性

性质描述
abstract val size: Int返回集合的大小。

Set 接口的函数

Kotlin Set 接口有几个函数。其中一些函数如下所述。

函数描述
abstract fun contains(element: E): Boolean检查提及的元素是否在此集合中。如果包含元素,则返回 true,否则返回 false。
abstract fun containsAll(elements: Collection<E>): Boolean检查指定集合的所有提及元素是否在此集合中。如果包含元素,则返回 true,否则返回 false。
abstract fun isEmpty(): Boolean如果集合为空(不包含任何元素),则返回 true,否则返回 false。
abstract fun iterator(): Iterator<E>返回 set 对象元素的迭代器。
fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean如果所有元素都与给定的谓词匹配,则返回 true。
fun <T> Iterable<T>.any(): Boolean如果集合包含至少一个元素,则返回 true。
fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int返回与给定谓词匹配的元素总数。
fun <T> Iterable<T>.distinct(): List<T>返回一个仅包含给定集合中不重复元素的列表。
fun <T> Iterable<T>.drop(n: Int): List<T>返回一个包含除前 n 个元素之外的所有元素的列表。
fun <T> Iterable<T>.elementAtOrElse(
index: Int,
defaultValue: (Int) -> T
): T
在当前集合中,如果索引越界,则返回给定索引处的元素或调用 defaultValue 函数的结果。
fun <T> Iterable<T>.filter(
predicate: (T) -> Boolean
): List<T>
返回一个仅包含与给定谓词匹配的元素的列表。
fun <T> Iterable<T>.filterIndexed(
predicate: (index: Int, T) -> Boolean
): List<T>
返回一个仅包含与给定谓词匹配的元素的列表。
fun <T> Iterable<T>.filterNot(
predicate: (T) -> Boolean
): List<T>
返回一个仅包含与给定谓词不匹配的元素的列表。
fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T?返回与给定谓词匹配的第一个元素,如果找不到这样的元素,则返回 null
fun <T> Iterable<T>.findLast(predicate: (T) -> Boolean): T?返回与给定谓词匹配的最后一个元素,如果找不到这样的元素,则返回 null
fun <T> Iterable<T>.first(): T返回第一个元素。
fun <T> Iterable<T>.first(predicate: (T) -> Boolean): T返回与给定谓词匹配的第一个元素。
fun <T> Iterable<T>.firstOrnull(): T?返回第一个元素,如果集合为空,则返回 null
fun <T> Iterable<T>.indexOf(element: T): Int返回给定元素的第一个索引,如果元素不在集合中,则返回 -1。
fun <T> Iterable<T>.indexOfFirst(
predicate: (T) -> Boolean
): Int
返回与给定谓词匹配的第一个元素的索引,如果元素不在集合中,则返回 -1。
fun <T> Iterable<T>.indexOfLast(
predicate: (T) -> Boolean
): Int
返回与给定谓词匹配的最后一个元素的索引,如果元素不在集合中,则返回 -1。
infix fun <T> Iterable<T>.intersect(
other: Iterable<T>
): Set<T>
返回一个包含此集合和给定集合中所有元素的集合。
fun <T> Collection<T>.isNotEmpty(): Boolean如果不为空,则返回 true。
fun <T> Iterable<T>.last(): T返回最后一个元素。
fun <T> Iterable<T>.last(predicate: (T) -> Boolean): T返回与给定谓词匹配的最后一个元素。
fun <T> Iterable<T>.lastIndexOf(element: T): Int返回给定元素的最后一个索引,如果元素不在集合中,则返回 -1。
fun <T> Iterable<T>.lastOrnull(): T?返回集合的最后一个元素,如果集合为空,则返回 null
fun <T> Iterable<T>.lastOrnull(predicate: (T) -> Boolean): T?匹配给定谓词后返回最后一个元素,如果集合中找不到这样的元素,则返回 null
fun <T : Comparable<T>> Iterable<T>.max(): T?返回最大的元素,如果集合中没有元素,则返回 null
fun <T, R : Comparable<R>> Iterable<T>.maxBy(
selector: (T) -> R
): T?
返回产生给定函数最大值的第一个元素,如果集合中没有元素,则返回 null
fun <T : Comparable<T>> Iterable<T>.min(): T?返回最小的元素,如果集合中没有元素,则返回 null
fun <T, R : Comparable<R>> Iterable<T>.minBy(
selector: (T) -> R
): T?
返回给出给定函数最小值的第一个元素,如果集合中没有元素,则返回 null
operator fun <T> Set<T>.minus(element: T): Set<T>返回一个包含原始集合中除给定元素外的所有元素的集合。
operator fun <T> Set<T>.minus(elements: Iterable<T>): Set<T>返回一个包含原始集合中除给定元素集合外的所有元素的集合。
operator fun <T> Iterable<T>.minus(element: T): List<T>返回一个包含原始集合中除包含在给定元素数组中的元素外的所有元素的列表。
fun <T> Set<T>.minusElement(element: T): Set<T>返回一个包含原始集合中除给定元素外的所有元素的集合。
fun <T> Iterable<T>.minusElement(element: T): List<T>返回一个包含原始集合中除给定元素第一次出现外的所有元素的列表。
operator fun <T> Set<T>.plus(element: T): Set<T>返回一个包含原始集合的所有元素以及给定元素(如果它尚未存在于集合中)的集合。
operator fun <T> Set<T>.plus(elements: Iterable<T>): Set<T>返回一个包含原始集合的所有元素以及给定元素集合(如果它们尚未存在于集合中)的集合。返回的集合保持与原始集合相同的元素迭代顺序。
operator fun <T> Iterable<T>.plus(element: T): List<T>返回一个包含原始集合的所有元素以及给定元素的列表。
fun <T> Set<T>.plusElement(element: T): Set<T>返回一个包含原始集合的所有元素以及给定元素的集合。
fun <T> Iterable<T>.plusElement(element: T): List<T>返回一个包含原始集合的所有元素以及给定元素的列表。
fun <T> Iterable<T>.reversed(): List<T>返回一个元素顺序相反的列表。
fun <T> Iterable<T>.single(): T返回单个元素,如果集合有多个元素或为空,则抛出异常。
fun <T> Iterable<T>.singleOrnull(): T?返回单个元素,如果集合有多个元素或为空,则返回 null

Kotlin Set 接口示例 1

让我们创建一个使用 setOf() 函数声明和遍历 set 元素的示例。在此示例中,我们创建了一个非泛型的 Int 类型 set 和另一个 Any 类型的泛型 set。

输出

.......print Int set.........
2
6
4
29
5
.......print Any set.........
2
6
4
29
5
Ashu
Ajay

在上面的示例中,我们在 intSetmySet 中都声明了两次元素 4,但在遍历它们时,它们只打印了元素 4 一次。这是因为 Set 接口不支持重复元素。

Kotlin Set 接口示例 2 - contains() 和 containsAll()

contains() 函数检查给定元素是否存在于当前 set 中。如果存在于 set 中,则 set 返回 true,否则返回 false。而 containsAll() 函数检查集合类型的所有元素是否存在于当前 set 中。如果 set 包含集合类型的所有元素,则返回 true,否则返回 false。

输出

.......print Any set.........
2
6
4
29
5
Ashu
Ajay
...mySet.contains"Ashu"...
true
...mySet.contains(20)...
false
...mySet.containsAll(intSet)...
true

Kotlin Set 接口示例 3 - isEmpty() 和 isNotEmpty()

isEmpty() 函数检查当前 set 是否为空。如果 set 为空,则 isEmpty() 函数返回 true,否则返回 false。而 isNotEmpty() 检查当前 set 是否不为空。如果 set 不为空,则 isNotEmpty() 函数返回 true,否则返回 false。

输出

.......print Any set.........
2
6
4
29
5
Ashu
Ajay
...mySet.isEmpty()...
false
...mySet.isNotEmpty()...
true

Kotlin Set 接口示例 4 - drop()

drop() 函数返回除集合前 n 个元素外的所有元素。

输出

.......print Any set.........
2
6
4
29
5
Ajay
Ashu
.......print Set after mySet.drop(4).........
5
Ajay
Ashu

Kotlin Set 接口示例 5 - elementAt() 和 elementAtOrNull()

elementAt() 函数返回给定索引处的元素,elementAtOrNull() 函数也返回给定索引处的元素,但如果指定索引不包含元素,则返回 null。

输出

.......print Any set.........
2
6
4
29
5
Ajay
Ashu
.......print mySet.elementAt(3).........
29
.......print mySet.elementAtOrNull(5).........
Ajay