Kotlin數(shù)據(jù)容器(3)??集合

  • 集合概述

  • Set 集合

    • 不可變 Set 集合 [setOf]
    • 可變 Set 集合 [mutableSetOf、hashSetOf]
  • List 集合

    • 不可變 List 集合 [listOf]
    • 可變 List 集合 [mutableListOf腌歉、arrayListOf]
  • Map 集合

    • 不可變 Map 集合 [mapOf]
    • 可變 Map 集合 [mutableMapOf厢绝、hashMapOf]

一炸庞、集合概述

??Kotlin 集合類型分為 CollectionMap最欠。MutableCollectionCollection 的可變的子接口呕乎,MutableMapMap 的可變子接口猴蹂。Collection 還有兩個重要的子接口 SetList,他們都有可變接口MutableSetMutableList楣嘁。

??提示:Kotlin 集合與Java 集合一個很大的不同是:Kotlin 將集合分為不可變集合和可變集合磅轻,以 Mutable 開頭命名的接口都屬于可變集合,可變集合包含了修改集合的函數(shù) add逐虚、removeclear 等聋溜。

kotlin 主要集合接口和類

二、Set 集合

??Set 集合是由一串無序的叭爱、不能重復(fù)的相同類型元素構(gòu)成的集合撮躁。Set 集合的接口分為不可變集合 kotlin.collections.Set 和可變集合kotlin.collections.MutableSet,以及 Java 提供的實現(xiàn)類 java.util.HashSet

1买雾、不可變 Set 集合

??創(chuàng)建不可變 Set 集合可以使用工廠函數(shù) setOf

  • setOf()把曼,創(chuàng)建空的不可變的 Set 集合杨帽。
  • setOf(element: T),創(chuàng)建單個元素的不可變 Set 集合嗤军。
  • setOf(vararg elements: T)注盈,創(chuàng)建多個元素的不可變 Set 集合,vararg 表明參數(shù)個數(shù)是可變的叙赚。

??不可變 Set 集合接口是 kotlin.collections.Set老客,它也繼承自 Collection 接口,kotlin.collections.Set 提供了一些集合操作函數(shù)和屬性如下:

  • isEmpty() 函數(shù)震叮。判斷 Set 集合中是否有元素胧砰,沒有返回 false ,有返回 true苇瓣。該函數(shù)從 Collection 繼承過來尉间,與 isEmpty() 函數(shù)相反的函數(shù)是 isNotEmpty()
  • contains(element: E) 函數(shù)击罪。判斷 Set 集合中是否包括指定元素乌妒,包括返回 true,不包括返回 false外邓。該函數(shù)從 Collection 繼承過來撤蚊。
  • iterator() 函數(shù)。返回迭代器對象损话,迭代器對象用于集合遍歷侦啸。該函數(shù)從Collection 繼承過來。
  • size 屬性丧枪。返回 Set 集合中元素個數(shù)光涂,返回值為 Int 類型。改屬性從Collection 繼承過來拧烦。
fun main(args: Array<String>?) {
    val set1 = setOf<Int>()
    val set2 = setOf("abc")
    val set3 = setOf(1, 2, 3, 4, 5)
    
    println(set1.isEmpty())
    println(set2.size)
    println(set3.contains(3))
    
    println("=== 1忘闻、使用for循環(huán)遍歷 ===")
    for (item in set3) {
        println("讀取集合元素:$item")
    }

    println("=== 2、使用迭代器循環(huán)遍歷 ===")
    val iterator = set3.iterator()
    while (iterator.hasNext()) {
        val value = iterator.next()
        println("讀取集合元素:$value")
    }
}

2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: true
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 1
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: true
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: === 1恋博、使用for循環(huán)遍歷 ===
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:1
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:2
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:3
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:4
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:5
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: === 2齐佳、使用迭代器循環(huán)遍歷 ===
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:1
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:2
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:3
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:4
2019-06-12 16:00:59.527 9837-9837/cn.ak.kot I/System.out: 讀取集合元素:5

2、可變 Set 集合

??創(chuàng)建可變 Set 合集可以使用工廠函數(shù) mutableSetOfhashSetOf 等债沮,mutableSetOf 創(chuàng)建的集合是 MutableSet 接口類型昨寞,而 hashSetOf 創(chuàng)建的集合是 HashSet 具體類型吟宦。每個函數(shù)都有兩個版本:

  • mutableSetOf()疙挺,創(chuàng)建空的可變的 Set 集合翅帜,集合類型為 MutableSet 接口。
  • mutableSetOf(vararg elements: T),創(chuàng)建多個元素的可變 Set 集合童芹,vararg 表明參數(shù)個數(shù)是可變的涮瞻,集合類型為 MutableSet 接口。
  • hashSetOf()假褪,創(chuàng)建空的可變的 Set 集合署咽,集合類型為 HashSet 類。
  • hashSetOf(vararg elements: T)嗜价,創(chuàng)建多個元素的可變 Set 集合,vararg 表明參數(shù)個數(shù)是可變的幕庐,集合類型為 HashSet 類久锥。

??可變 Set 集合接口是 kotlin.collections.MutableSet,它也繼承自 kotlin.collections.Set 接口异剥,kotlin.collections.MutableSet 提供了一些修改集合的函數(shù)如下:

  • add(element: E) 函數(shù)瑟由。在 Set 集合的尾部添加指定的元素。該函數(shù)從 MutableCollection 繼承過來冤寿。
  • remove(element: E) 函數(shù)歹苦。如果 Set 集合中存在指定元素,則從 Set 集合中移除該元素督怜。該函數(shù)從 MutableCollection 繼承過來殴瘦。
  • clear() 函數(shù)。從 Set 集合中移除所有元素号杠。該函數(shù)從MutableCollection 繼承過來蚪腋。
fun main(args: Array<String>?) {
    val mutableSet1 = mutableSetOf<String>()
    val mutableSet2 = mutableSetOf(1, 3, 4, 5, 79, 0, 2)
    mutableSet1.add("a")
    mutableSet1.add("b")
    mutableSet1.add("c")
    mutableSet1.add("b")    // 添加了重復(fù)元素,無效姨蟋,元素個數(shù)還為3

    println("mutableSet1集合含有 ${mutableSet1.size} 個元素")
    println(mutableSet1)

    mutableSet1.remove("b")
    mutableSet1.remove("f")
    println("mutableSet1集合是否包含\"b\" -> ${mutableSet1.contains("b")}")

    mutableSet1.clear()
    println("mutableSet1集合是否為空集合 -> ${mutableSet1.isEmpty()}")



    val hashSet1 = hashSetOf<String>()
    val hashSet2 = hashSetOf(1, 3, 4, 5, 79, 0, 2)
    println("=== 1屉凯、使用for循環(huán)遍歷 ===")
    for (item in hashSet2) {
        println("讀取hashSet2集合元素:$item")
    }

    println("=== 2、使用迭代器循環(huán)遍歷 ===")
    val iterator = hashSet2.iterator()
    while (iterator.hasNext()) {
        val value = iterator.next()
        println("讀取hashSet2集合元素:$value")
    }
}

2019-06-12 16:26:53.644 10270-10270/cn.ak.kot I/System.out: mutableSet1集合含有 3 個元素
2019-06-12 16:26:53.644 10270-10270/cn.ak.kot I/System.out: [a, b, c]
2019-06-12 16:26:53.644 10270-10270/cn.ak.kot I/System.out: mutableSet1集合是否包含"b" -> false
2019-06-12 16:26:53.644 10270-10270/cn.ak.kot I/System.out: mutableSet1集合是否為空集合 -> true
2019-06-12 16:26:53.644 10270-10270/cn.ak.kot I/System.out: === 1眼溶、使用for循環(huán)遍歷 ===
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:0
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:1
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:2
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:3
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:4
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:5
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:79
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: === 2悠砚、使用迭代器循環(huán)遍歷 ===
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:0
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:1
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:2
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:3
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:4
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:5
2019-06-12 16:26:53.645 10270-10270/cn.ak.kot I/System.out: 讀取hashSet2集合元素:79

三、List 集合

??List 集合中元素是有序的堂飞,可以重復(fù)出現(xiàn)灌旧。List 集合的接口分為不可變集合 kotlin.collections.List 和可變結(jié)合kotlin.collections.MutableList,以及 Java 提供的實現(xiàn)類 java.util.ArrayListjava.util.LinkedList绰筛。

??提示:ListSet 集合相比节榜,List 集合強調(diào)的是有序,Set 集合強調(diào)的是不重復(fù)别智。當(dāng)不考慮順序且沒有重復(fù)元素時宗苍,ListSet 集合可以互相替換。

1、不可變 List 集合

??創(chuàng)建不可變 List 集合可以使用工廠函數(shù) listOf

  • listOf()讳窟,創(chuàng)建空的不可變的 List 集合让歼。
  • listOf(element: T),創(chuàng)建單個元素的不可變 List 集合丽啡。
  • listOf(vararg elements: T)谋右,創(chuàng)建多個元素的不可變 List 集合,vararg 表明參數(shù)個數(shù)是可變的补箍。

??不可變 List 集合接口是 kotlin.collections.List改执,它也繼承自 Collection 接口,kotlin.collections.List 提供了一些集合操作函數(shù)和屬性如下:

  • isEmpty() 函數(shù)坑雅。判斷 List 集合中是否有元素辈挂,沒有返回 false ,有返回 true裹粤。該函數(shù)從 Collection 繼承過來终蒂,與 isEmpty() 函數(shù)相反的函數(shù)是 isNotEmpty()
  • contains(element: E) 函數(shù)遥诉。判斷 List 集合中是否包括指定元素拇泣,包括返回 true,不包括返回 false矮锈。該函數(shù)從 Collection 繼承過來霉翔。
  • iterator() 函數(shù)。返回迭代器對象苞笨,迭代器對象用于集合遍歷早龟。該函數(shù)從Collection 繼承過來。
  • size 屬性猫缭。返回 List 集合中元素個數(shù)葱弟,返回值為 Int 類型。改屬性從Collection 繼承過來猜丹。
  • indexOf(element: E) 函數(shù)芝加。從前往后查找 List 集合中元素,返回第一次出現(xiàn)指定元素的索引射窒,如果此集合不包含該元素藏杖,則返回 -1
  • lastIndexOf(element: E) 函數(shù)脉顿。從后往前查找 List 集合中元素蝌麸,返回第一次出現(xiàn)指定元素的索引,如果此集合不包含該元素艾疟,則返回 -1来吩。
  • subList(fromIndex: Int, toIndex: Int) 函數(shù)敢辩。返回 List 集合中指定的 fromIndex(包括)toIndex(不包括) 之間的元素集合,返回值為 List 集合弟疆。
fun main(args: Array<String>?) {
    val list1 = listOf<Int>()
    val list2 = listOf("abc")
    val list3 = listOf(1, 2, 3, 4, 5)
    val list4 = list3.subList(1, 3)

    println(list1.isEmpty())
    println(list2.size)
    println(list3.contains(3))
    println(list3.indexOf(2))
    println(list4)

    println("=== 1戚长、使用for循環(huán)遍歷 ===")
    for (item in list3) {
        println("讀取集合元素:$item")
    }

    println("=== 2、使用迭代器循環(huán)遍歷 ===")
    val iterator = list3.iterator()
    while (iterator.hasNext()) {
        val value = iterator.next()
        println("讀取集合元素:$value")
    }
}

2019-06-12 16:47:30.256 10611-10611/cn.ak.kot I/System.out: true
2019-06-12 16:47:30.256 10611-10611/cn.ak.kot I/System.out: 1
2019-06-12 16:47:30.256 10611-10611/cn.ak.kot I/System.out: true
2019-06-12 16:47:30.256 10611-10611/cn.ak.kot I/System.out: 1
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: [2, 3]
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: === 1怠苔、使用for循環(huán)遍歷 ===
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:1
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:2
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:3
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:4
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:5
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: === 2同廉、使用迭代器循環(huán)遍歷 ===
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:1
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:2
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:3
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:4
2019-06-12 16:47:30.257 10611-10611/cn.ak.kot I/System.out: 讀取集合元素:5

2、可變 List 集合

??創(chuàng)建可變 List 合集可以使用工廠函數(shù) mutableListOfarrayListOf 等柑司,mutableListOf 創(chuàng)建的集合是 MutableList 接口類型迫肖,而 arrayListOf 創(chuàng)建的集合是 ArrayList 具體類型。每個函數(shù)都有兩個版本:

  • mutableListOf()攒驰,創(chuàng)建空的可變的 List 集合蟆湖,集合類型為 MutableList 接口。
  • mutableListOf(vararg elements: T)讼育,創(chuàng)建多個元素的可變 List 集合帐姻,vararg 表明參數(shù)個數(shù)是可變的稠集,集合類型為 MutableList 接口奶段。
  • arrayListOf(),創(chuàng)建空的可變的 List 集合剥纷,集合類型為 ArrayList 類痹籍。
  • arrayListOf(vararg elements: T),創(chuàng)建多個元素的可變 List 集合晦鞋,vararg 表明參數(shù)個數(shù)是可變的蹲缠,集合類型為 ArrayList 類。

??可變 List 集合接口是 kotlin.collections.MutableList悠垛,它也繼承自 kotlin.collections.List 接口线定,kotlin.collections.MutableList 提供了一些修改集合的操作函數(shù)如下:

  • add(element: E) 函數(shù)。在 List 集合的尾部添加指定的元素确买。該函數(shù)從 MutableCollection 繼承過來斤讥。
  • remove(element: E) 函數(shù)。如果 List 集合中存在指定元素湾趾,則從 List 集合中移除該元素芭商。該函數(shù)從 MutableCollection 繼承過來。
  • clear() 函數(shù)搀缠。從 List 集合中移除所有元素铛楣。該函數(shù)從MutableCollection 繼承過來。
fun main(args: Array<String>?) {
    val mutableList1 = mutableListOf<String>()
    val mutableList2 = mutableListOf(1, 3, 4, 5, 79, 0, 2)
    mutableList1.add("a")
    mutableList1.add("b")
    mutableList1.add("c")
    mutableList1.add("b")    // 可正常添加了重復(fù)元素艺普,元素個數(shù)為4

    println("mutableList1集合含有 ${mutableList1.size} 個元素")
    println(mutableList1)

    mutableList1.remove("b")
    println(mutableList1)
    mutableList1.remove("f")
    println("mutableList1集合是否包含\"b\" -> ${mutableList1.contains("b")}")

    mutableList1.clear()
    println("mutableList1集合是否為空集合 -> ${mutableList1.isEmpty()}")



    val arrayList1 = arrayListOf<String>()
    val arrayList2 = arrayListOf(1, 3, 4, 5, 79, 0, 2)
    println("=== 1簸州、使用for循環(huán)遍歷 ===")
    for (item in arrayList2) {
        println("讀取arrayList2集合元素:$item")
    }

    println("=== 2鉴竭、使用迭代器循環(huán)遍歷 ===")
    val iterator = arrayList2.iterator()
    while (iterator.hasNext()) {
        val value = iterator.next()
        println("讀取arrayList2集合元素:$value")
    }
}

2019-06-12 17:04:23.930 11084-11084/cn.ak.kot I/System.out: mutableList1集合含有 4 個元素
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: [a, b, c, b]
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: [a, c, b]
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: mutableList1集合是否包含"b" -> true
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: mutableList1集合是否為空集合 -> true
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: === 1、使用for循環(huán)遍歷 ===
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:1
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:3
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:4
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:5
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:79
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:0
2019-06-12 17:04:23.931 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:2
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: === 2勿侯、使用迭代器循環(huán)遍歷 ===
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:1
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:3
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:4
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:5
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:79
2019-06-12 17:04:23.932 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:0
2019-06-12 17:04:23.933 11084-11084/cn.ak.kot I/System.out: 讀取arrayList2集合元素:2

四拓瞪、Map 集合

??Map 集合表示一種復(fù)雜的集合,允許按照某個鍵來訪問元素助琐。Map 集合是由兩個集合構(gòu)成祭埂,一個是鍵合集,一個是值集合兵钮。鍵集合是 Set 類型蛆橡,因此不能有重復(fù)的元素。而值集合是 Collection 類型掘譬,可以有重復(fù)的集合泰演。Map 集合中的鍵和值是成對出現(xiàn)的。Map 集合的接口分為不可變集合kotlin.collections.Map 和 可變集合 kotlin.collections.mutableMap葱轩,以及 Java 提供的實現(xiàn)類 java.util.HashMap睦焕。

1、不可變 Map 集合

??創(chuàng)建不可變 Map 集合可以使用工廠函數(shù) mapOf

  • mapOf()靴拱,創(chuàng)建空的不可變的 Map 集合垃喊。
  • mapOf(pair: Pair<K, V>),創(chuàng)建一個鍵值對元素的不可變 Map 集合袜炕。Pairkotlin 標(biāo)準(zhǔn)庫提供的只有兩個成員屬性的標(biāo)準(zhǔn)數(shù)據(jù)類本谜。
  • mapOf(vararg pairs: Pair<K, V>),創(chuàng)建多個鍵值對元素的不可變 Map 集合偎窘,vararg 表明參數(shù)個數(shù)是可變的乌助。

??不可變 Map 集合接口是 kotlin.collections.Map,它也繼承自 Collection 接口陌知,kotlin.collections.Map 提供了一些集合操作函數(shù)和屬性如下:

  • isEmpty() 函數(shù)他托。判斷 Map 集合中是否有鍵值對,沒有返回 false 仆葡,有返回 true赏参。
  • containsKey(key: K) 函數(shù)。判斷鍵集合中是否包含指定元素浙芙,包括返回 true登刺,不包括返回 false
  • containsValue(value: V) 函數(shù)嗡呼。判斷值集合中是否包含指定元素纸俭,包括返回 true,不包括返回 false南窗。
  • size 屬性揍很。返回 Map 集合中鍵值對個數(shù)郎楼。
  • keys 屬性。返回 Map 中所有鍵集合窒悔,返回值是 Set 類型呜袁。
  • values 屬性。返回 Map 中所有值集合简珠,返回值是 Collection 類型阶界。
fun main(args: Array<String>?) {
    val map1 = mapOf<Int, String>()
    val map2 = mapOf(1 to 4)
    val map3 = mapOf(101 to "老大", 102 to "老二", 103 to "小三", 104 to "老二")

    println("集合 size = ${map3.size}")
    println(map3)
    println("103 - ${map3[103]}")
    println("鍵集合中是否包含 103 - ${map3.containsKey(103)}")
    println("值集合中是否包含 老二 - ${map3.containsValue("老二")}")
    println("值集合中是否包含 老五 - ${map3.containsValue("老五")}")

    println("判斷map1集合是否為空 - ${map1.isEmpty()}")

    println("=== 1、使用for循環(huán)遍歷 ===")
    val keys = map3.keys
    for (key in keys) {
        println("key=${key} - value=${map3[key]}")
    }

    println("=== 2聋庵、使用迭代器循環(huán)遍歷 ===")
    val values = map3.values
    val iterator = values.iterator()
    while (iterator.hasNext()) {
        val value = iterator.next()
        println("值集合元素:$value")
    }
}

2019-06-12 17:45:57.719 11806-11806/cn.ak.kot I/System.out: 集合 size = 4
2019-06-12 17:45:57.719 11806-11806/cn.ak.kot I/System.out: {101=老大, 102=老二, 103=小三, 104=老二}
2019-06-12 17:45:57.719 11806-11806/cn.ak.kot I/System.out: 103 - 小三
2019-06-12 17:45:57.719 11806-11806/cn.ak.kot I/System.out: 鍵集合中是否包含 103 - true
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合中是否包含 老二 - true
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合中是否包含 老五 - false
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 判斷map1集合是否為空 - true
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: === 1膘融、使用for循環(huán)遍歷 ===
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: key=101 - value=老大
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: key=102 - value=老二
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: key=103 - value=小三
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: key=104 - value=老二
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: === 2、使用迭代器循環(huán)遍歷 ===
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合元素:老大
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合元素:老二
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合元素:小三
2019-06-12 17:45:57.722 11806-11806/cn.ak.kot I/System.out: 值集合元素:老二

2祭玉、可變 Map 集合

??創(chuàng)建可變 Map 合集可以使用工廠函數(shù) mutableMapOfhashMapOf 等氧映,mutableMapOf 創(chuàng)建的集合是 MutableMap 接口類型,而 hashMapOf 創(chuàng)建的集合是 HashMap 具體類型脱货。每個函數(shù)都有兩個版本:

  • mutableMapOf()岛都,創(chuàng)建空的可變的 Map 集合,集合類型為 MutableMap 接口振峻。
  • mutableMapOf(vararg pairs: Pair<K, V>)臼疫,創(chuàng)建多個鍵值對的可變 Map 集合,vararg 表明參數(shù)個數(shù)是可變的铺韧,集合類型為 MutableMap 接口多矮。
  • hashMapOf()缓淹,創(chuàng)建空的可變的 Map 集合哈打,集合類型為 HashMap 類。
  • hashMapOf(vararg pairs: Pair<K, V>)讯壶,創(chuàng)建多個鍵值對的可變 Map 集合料仗,vararg 表明參數(shù)個數(shù)是可變的,集合類型為 HashMap 類伏蚊。

??可變 Map 集合接口是 kotlin.collections.MutableMap立轧,它也繼承自 kotlin.collections.Map 接口,kotlin.collections.MutableMap 提供了一些修改集合的操作函數(shù)如下:

  • put(key: K, value: V) 函數(shù)躏吊。指定鍵值對添加到集合中氛改。
  • remove(key: K) 函數(shù)。移除指定鍵的鍵值對比伏。
  • clear() 函數(shù)胜卤。移除 Map 中所有的鍵值對。
fun main(args: Array<String>?) {
    val mutableMap1 = mutableMapOf<Int, String>()
    val mutableMap2 = mutableMapOf(101 to "老大")

    mutableMap2[102] = "老二"
    mutableMap2.put(103, "小三")
    println(mutableMap2)

    mutableMap2.put(103, "老三") // 鍵已經(jīng)存在赁项,則替換值
    println(mutableMap2)

    println("mutableMap1集合含有 ${mutableMap1.size} 個元素")
    println(mutableMap1)

    mutableMap2.remove(102)
    println(mutableMap2)

    mutableMap2.clear()
    println("mutableMap2集合是否為空集合 -> ${mutableMap2.isEmpty()}")
}

2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: {101=老大, 102=老二, 103=小三}
2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: {101=老大, 102=老二, 103=老三}
2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: mutableMap1集合含有 0 個元素
2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: {}
2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: {101=老大, 103=老三}
2019-06-12 18:02:43.316 12135-12135/cn.ak.kot I/System.out: mutableMap2集合是否為空集合 -> true

??提示:Map集合添加鍵值對時需要注意:如果鍵已經(jīng)存在葛躏,則會替換原有值澈段;如果這個鍵不存在,會添加一個鍵值對舰攒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末败富,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摩窃,更是在濱河造成了極大的恐慌兽叮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猾愿,死亡現(xiàn)場離奇詭異充择,居然都是意外死亡,警方通過查閱死者的電腦和手機匪蟀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門椎麦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人材彪,你說我怎么就攤上這事观挎。” “怎么了段化?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵嘁捷,是天一觀的道長。 經(jīng)常有香客問我显熏,道長雄嚣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任喘蟆,我火速辦了婚禮缓升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕴轨。我一直安慰自己港谊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布橙弱。 她就那樣靜靜地躺著歧寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棘脐。 梳的紋絲不亂的頭發(fā)上斜筐,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音蛀缝,去河邊找鬼顷链。 笑死,一個胖子當(dāng)著我的面吹牛内斯,可吹牛的內(nèi)容都是我干的蕴潦。 我是一名探鬼主播像啼,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼潭苞!你這毒婦竟也來了忽冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤此疹,失蹤者是張志新(化名)和其女友劉穎僧诚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝗碎,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡湖笨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹦骑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慈省。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眠菇,靈堂內(nèi)的尸體忽然破棺而出边败,到底是詐尸還是另有隱情,我是刑警寧澤捎废,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布笑窜,位于F島的核電站,受9級特大地震影響登疗,放射性物質(zhì)發(fā)生泄漏排截。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一辐益、第九天 我趴在偏房一處隱蔽的房頂上張望断傲。 院中可真熱鬧,春花似錦荷腊、人聲如沸艳悔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抡锈,卻和暖如春疾忍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背床三。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工一罩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撇簿。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓聂渊,卻偏偏與公主長得像差购,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子汉嗽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容