在Android日常開發(fā)中讶泰,數(shù)組和集合這兩個數(shù)據(jù)容器是必不可少的毅待。在Kotlin中集合同樣是有三大類:List、Set酪捡、Map叁征。作用含義都和Java 的類似。
-- List 是有序集合
-- Set 是唯一集合
-- Map 是鍵值對集合
如何構造集合
Kotlin中集合又分為 可變集合 以及 不可變集合逛薇∞嗵郏可變集合都是有 mutable修飾的。但是構造集合都是大同小異永罚,下邊會直接通過代碼演示說明之間的差異啤呼。
通過元素進行構造
- 不可變的集合構造方式
fun createCollection(): Unit {
//創(chuàng)建不可變有序集合 list
val list = listOf<String>("你好", "再見", "你好")
println("list elements is $list")
//創(chuàng)建不可變唯一集合 set
val set = setOf<Int>(1, 2, 3, 3, 4)
println("set elements is $set")
//創(chuàng)建不可變鍵值對集合 map
val map1 = mapOf<Int, String>(1 to "小明", 2 to "大明", 3 to "大明")
println("map elements is $map1")
val map2 = mapOf<Int, String>(1 to "小明", 2 to "大明", 3 to "大明", 3 to "大能")
println("map elements is $map2")
}
控制臺打印
list elements is [你好, 再見, 你好]
set elements is [1, 2, 3, 4]
map1 elements is {1=小明, 2=大明, 3=大明}
map2 elements is {1=小明, 2=大明, 3=大能}
可以看到,set集合有唯一性呢袱。map集合與Java中的map集合一樣媳友,key也是唯一性。Kotlin空安全的設計产捞,默認創(chuàng)建下 value 是不能為 null 的『哂可以通過 ? 來輸入 null坯临。
val map3 = mapOf<Int, String?>(1 to "小明", 2 to "大明", 3 to null)
println("map3 elements is $map3")
map3 elements is {1=小明, 2=大明, 3=null}
- 可變集合創(chuàng)建
可變集合創(chuàng)建,只需要在對應的集合前加上 mutable
val mutableListOf = mutableListOf<String>()
可變集合則可以在創(chuàng)建之后通過 add 等修改方法恋昼,添加或者刪除集合中的元素看靠。
創(chuàng)建具體類型的集合
val arrayList1 = ArrayList<Int>(listOf(1,2,3))
println("arrayList1 is $arrayList1")
arrayList1.add(6)
println("arrayList1 is $arrayList1")
val linkedList = LinkedList<String>(listOf("小明","大明"))
println("linkedList is $linkedList")
linkedList.addFirst("小能")
println("linkedList is $linkedList")
linkedList.addLast("大能")
println("linkedList is $linkedList")
arrayList1 is [1, 2, 3]
arrayList1 is [1, 2, 3, 6]
linkedList is [小明, 大明]
linkedList is [小能, 小明, 大明]
linkedList is [小能, 小明, 大明, 大能]
集合的復制
fun copyCollection(){
val sourceList = mutableListOf<Int>(1, 3, 4, 5, 6, 7,7)
println("sourceList is $sourceList")
val copyList = sourceList.toMutableList()
println("copyList is $copyList")
println("===== modify source collection =====")
copyList.add(9)
println("sourceList is $sourceList")
println("copyList is $copyList")
println("===== transform list to set collection =====")
val transformSet = sourceList.toMutableSet()
println("sourceList is $sourceList")
println("transformSet is $transformSet")
println("===== sole reference =====")
val reference = sourceList
reference.add(10)
println("reference is $reference")
println("sourceList is $sourceList")
println("copyList is $copyList")
println("transformSet is $transformSet")
}
Kotlin 中集合的復制,相當于將數(shù)據(jù)重新備份到一個新的對象中液肌,一個新的內(nèi)存區(qū)域中挟炬。在修改拷貝之后的集合,原集合的數(shù)據(jù)內(nèi)容也是不會發(fā)生改變的。
同時谤祖,集合拷貝還可以將 List 的數(shù)據(jù)轉(zhuǎn)為 Set 的數(shù)據(jù)婿滓。
如果集合都是對應一個引用,則在修改集合內(nèi)容的時候粥喜,同一個引用的集合數(shù)據(jù)也是同樣會有修改的凸主。