Kotlin学习之Set常用集合工具函数
Kotlin中定义了很多工具函数,用来创建不同类型的Set,下面是一些常用的函数:
一、setOf()函数
与Collections.kt相似,Set.kt定义了三个参数不同的setOf()函数:
inline fun <T> setOf(): Set<T> = emptySet()
fun <T> setOf(element: T): Set<T> = java.util.Collections.singleton(element)
fun <T> setOf(vararg elements: T): Set<T> =
if (elements.size > 0) elements.toSet() else emptySet()
setOf()函数返回一个不可变的Set<T>
,需要注意的是第三个函数,当我们传入一个T类型的数组,如果长度为0,就会返回一个空Set,否则就调用Arrays<out T>.toSet()
函数将其转换为Set。
Arrays<out T>.toSet()
函数如下所示:
fun <T> Array<out T>.toSet(): Set<T> {
return when (size) {
0 -> emptySet()
1 -> setOf(this[0])
else -> toCollection(LinkedHashSet<T>(mapCapacity(size)))
}
}
所以,使用setOf()函数得到的Set是通过LinkedHashSet实现的,是有序的Set。
二、mutableSetOf()函数
Set.kt同样提供了生成可变Set的mutableSetOf()函数:
inline fun <T> mutableSetOf(): MutableSet<T> = LinkedHashSet()
fun <T> mutableSetOf(vararg elements: T): MutableSet<T> =
elements.toCollection(LinkedHashSet<T>(mapCapacity(size)))
mutableSetOf()函数是通过LinkedHashSet实现的有序Set。
三、hashSetOf()函数与LinkedSetOf()函数
这两个函数与mutableSetOf()的实现方式相似,主要是返回类型与实现类型有所不同:
inline fun <T> hashSetOf(): HashSet<T> = HashSet()
inline fun <T> linkedSetOf(): LinkedHashSet<T> = LinkedHashSet()
fun <T> hashSetOf(vararg elements: T): HashSet<T> =
elements.toCollection(HashSet(mapCapacity(elements.size)))
fun <T> linkedSetOf(vararg elements: T): LinkedHashSet<T> =
elements.toCollection(LinkedHashSet(mapCapacity(elements.size)))
hashSetOf()返回HashSet对象;LinkedSetOf()返回LinkedHashSet对象。
四、sortSetOf()函数
fun <T> sortedSetOf(vararg elements: T): TreeSet<T> =
elements.toCollection(TreeSet<T>())
fun <T> sortedSetOf(comparator: Comparator<in T>, vararg elements: T): TreeSet<T> =
elements.toCollection(TreeSet<T>(comparator))
此函数用来创建已排序的TreeSet对象。
TreeSet容纳的类型需要实现Comparable接口,或者传入一个Comparator作为排序的依据,所以上面的两个函数中,第一个函数要求传入T类型需要实现Comparable接口,第二个函数则要求传入一个Comparator对象。
网友评论