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

作者: 程序员丶星霖 | 来源:发表于2017-12-15 17:56 被阅读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

    相关文章

      网友评论

        本文标题:Kotlin学习之Set常用集合工具函数

        本文链接:https://www.haomeiwen.com/subject/izbdwxtx.html