禅与计算机程序设计艺术简书人物Kotlin专题

Kotlin学习之Set常用集合工具函数

2017-12-15  本文已影响24人  程序员丶星霖

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对象。

学海无涯苦作舟

我的微信公众号.jpg
上一篇下一篇

猜你喜欢

热点阅读