集合概述
Set 集合
- 不可變 Set 集合 [setOf]
- 可變 Set 集合 [mutableSetOf、hashSetOf]
List 集合
- 不可變 List 集合 [listOf]
- 可變 List 集合 [mutableListOf腌歉、arrayListOf]
Map 集合
- 不可變 Map 集合 [mapOf]
- 可變 Map 集合 [mutableMapOf厢绝、hashMapOf]
一炸庞、集合概述
??Kotlin 集合類型分為 Collection
和 Map
最欠。MutableCollection
是 Collection
的可變的子接口呕乎,MutableMap
是 Map
的可變子接口猴蹂。Collection
還有兩個重要的子接口 Set
和 List
,他們都有可變接口MutableSet
和 MutableList
楣嘁。
??提示:Kotlin 集合與Java 集合一個很大的不同是:Kotlin 將集合分為不可變集合和可變集合磅轻,以 Mutable 開頭命名的接口都屬于可變集合,可變集合包含了修改集合的函數(shù) add
逐虚、remove
和 clear
等聋溜。
二、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ù) mutableSetOf
和 hashSetOf
等债沮,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.ArrayList
和 java.util.LinkedList
绰筛。
??提示:List
與 Set
集合相比节榜,List
集合強調(diào)的是有序,Set
集合強調(diào)的是不重復(fù)别智。當(dāng)不考慮順序且沒有重復(fù)元素時宗苍,List
和 Set
集合可以互相替換。
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ù) mutableListOf
和 arrayListOf
等柑司,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 集合袜炕。Pair 是 kotlin 標(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ù) mutableMapOf
和 hashMapOf
等氧映,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)存在葛躏,則會替換原有值澈段;如果這個鍵不存在,會添加一個鍵值對舰攒。