Kotlin 基礎——Set集合詳解


Kotlin的集合類由兩個接口派生:Collection和Map。

Kotlin的集合分爲兩大類:可變集合和不可變集合。只有可變集合才能添加、刪除、修改元素,不可變集合只能讀取元素。

Kotlin的Collection集合和Set集合的功能基本相同,Set集合只是爲Collection集合增加了額外的限制:集合元素不允許重複

一、聲明和創建

Kotlin提供瞭如下函數來創建Set集合。

  • setOf():該函數返回不可變的Set集合。該函數可以接受0個或多個參數,這些參數將作爲集合的元素。
  • mutableSetOf():該函數返回可變的MutableSet集合。該函數可接受0個或多個參數,這些參數將作爲集合的元素。
  • hashSetOf():該函數返回可變的HashSet集合。該函數可接受0個或多個參數,這些參數將作爲集合的元素。
  • linkedSetOf():該函數返回可變的LinkedHashSet集合。該函數可接受0個或多個參數,這些參數將作爲集合的元素。
  • sortedSetOf():該函數返回可變的TreeSet集合。該函數可接受0個或多個參數,這些參數將作爲集合的元素。
    //創建不可變集合,返回值是Set
    var set = setOf("Java", "Kotlin", "Go")
    println(set)//集合元素按添加順序排列
    //創建可變集合,返回值是MutableSet
    var mutableSet = mutableSetOf("Java", "Kotlin", "Go")
    println(mutableSet)//集合元素按添加順序排列
    println("setOf返回對象的實際類型:${set.javaClass}")
    println("mutableSetOf返回對象的實際類型:${mutableSet.javaClass}")
    //創建HashSet集合
    var hashSet = hashSetOf("Java", "Kotlin", "Go")
    println(hashSet)//不保證元素的順序
    //創建LinkedHashSet集合
    var linkedHashSet = linkedSetOf("Java", "Kotlin", "Go")
    println(linkedHashSet)//集合元素按添加順序排列
    //創建TreeSet集合
    var treeSet = sortedSetOf("Java", "Kotlin", "Go")
    println(treeSet)//集合元素由小到大排列

輸出結果:

[Java, Kotlin, Go]
[Java, Kotlin, Go]
setOf返回對象的實際類型:class java.util.LinkedHashSet
mutableSetOf返回對象的實際類型:class java.util.LinkedHashSet
[Go, Java, Kotlin]
[Java, Kotlin, Go]
[Go, Java, Kotlin]

二、使用Set的方法

    //創建不可變集合,返回值是Set
    var set = setOf("Java", "Kotlin", "Go")
    //判斷是否所有元素的長度都大於4
    println(set.all { it.length > 4 })
    //判斷是否任一元素的長豆都大於4
    println(set.any { it.length > 4 })
    //以Lambda表達式的值爲key,集合元素爲value,組成Map集合
    val map = set.associateBy { "學習" + it + "語言" }
    println(map)

    println("Java" in set)
    println("Go" !in set)

    //返回刪除Set集合前面兩個元素後的集合
    val dropedList = set.drop(2)
    println(dropedList)

    //對Set集合元素進行過濾:要求集合元素包含li
    val fliteredList = set.filter { "li" in it }
    println(fliteredList)

    //查找Set集合中包含li的元素,如果找到就返回該元素,否則就返回null
    val foundStr1 = set.find { "li" in it }
    println(foundStr1)

    //查找Set集合中的所有字符串拼接在一起
    val foldedList = set.fold("", { acc, e -> acc + e })
    println(foldedList)

    //查找某個元素的出現位置
    println(set.indexOf("Go"))

    //將每個集合元素映射成新值,返回所有新值組成的Set集合
    val mappedList = set.map { "學習" + it + "編程" }
    println(mappedList)

    //獲取最大值
    println(set.max())

    //獲取最小值
    println(set.min())

    //反轉集合順序
    val reversedList = set.reversed()
    println(reversedList)

    val bSet = setOf("Lua", "Erlang", "Kotlin")
    //計算兩個集合的交集
    println(set intersect bSet)
    //計算兩個集合的並集
    println(set union bSet)
    //集合相加,相當於並集
    println(set + bSet)
    //集合相減,減去公共的元素
    println(set - bSet)

輸出結果:

false
true
{學習Java語言=Java, 學習Kotlin語言=Kotlin, 學習Go語言=Go}
true
false
[Go]
[Kotlin]
Kotlin
JavaKotlinGo
2
[學習Java編程, 學習Kotlin編程, 學習Go編程]
Kotlin
Go
[Go, Kotlin, Java]
[Kotlin]
[Java, Kotlin, Go, Lua, Erlang]
[Java, Kotlin, Go, Lua, Erlang]
[Java, Go]

Kotlin規定以infix修飾的方法,能以運算符的方式進行調用。

三、遍歷Set

Kotlin也支持使用for-in循環遍歷Set,與遍歷數組的方式基本相同。

    var languages = setOf("Java", "Kotlin", "Python")
    for (language in languages) {
        println(language)
    }

輸出結果:

Java
Kotlin
Python

Set集合可使用接口中定義的forEach()方法來遍歷集合。

    var languages = setOf("Java", "Kotlin", "Python")
    languages.forEach { println(it) }

輸出結果:

Java
Kotlin
Python

由於setOf()方法返回的Set集合是有序的,所以可以通過索引來遍歷Set集合,Set集合提供了indices方法返回其索引的區間。

    var languages = setOf("Java", "Kotlin", "Python")
    for (i in languages.indices) {
        println(languages.elementAt(i))
    }

輸出結果:

Java
Kotlin
Python

四、可變的Set

setOf()函數返回的額集合是不可變集合;使用mutableSetof()、hashSetOf()、linkedSetOf()、sortedSetOf()函數返回的集合都是可變的。

4.1、添加元素

Set提供了add(element:E)方法來添加元素,每調用該方法一次,就會向Set中添加一個元素,Set的長度也會自動加1.

提供了addAll(elements:Collection)方法來批量添加多個元素。

    //定義一個可變的Set
    var languages = mutableSetOf("Java")
    //添加一個元素
    languages.add("Go")
    languages.add("Lua")
    println(languages)
    println(languages.count())
    languages.addAll(setOf("Swift", "Kotlin"))
    println(languages)

輸出結果:

[Java, Go, Lua]
3
[Java, Go, Lua, Swift, Kotlin]

4.2、刪除元素

Set提供瞭如下方法來刪除元素:

  • remove(element:E):刪除指定元素,刪除成功則返回true。
  • removeAll(elements:Collection):批量刪除Set集合中的多個元素。
  • retainAll(elements:Collection):只保留Set集合中與elements集合共有的元素。
  • clear():清空集合。
    //定義一個可變的Set
    var languages = mutableSetOf("Java", "OC", "PHP", "Perl", "Ruby", "Go")
    //刪除"PHP"
    languages.remove("PHP")
    //再次刪除"Perl"
    languages.remove("Perl")
    println(languages)
    //批量刪除多個元素
    languages.removeAll(setOf("Ruby", "Go"))
    println(languages)
    //清空Set集合
    languages.clear()
    println(languages.count())

輸出結果:

[Java, OC, Ruby, Go]
[Java, OC]
0

Kotlin的MutableIterator才相當於Java的Iterator。

更多精彩內容請掃碼關注:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章