Kotlin中的可变集合与不可变集合详解
可变集合:map使用
fun main(args: Array<String>) {
val map = mapOf<String, String>("a" to "aa", "b" to "bb")
for ((key, value) in map) {
println("key:$key,value:$value")
}
println("-------")
map.mapValues { entry -> "${entry.value}" }.forEach { println(it) } //key:value
println("-------")
map.mapValues { (key, value) -> "$value" }.forEach { println(it) }//解构
println("-------")
map.mapValues { (_, value) -> "$value" }.forEach { println(it) }//解构
println("-------")
//kotlin允许我们为解构声明整体指定类型,也可以为每一个具体的component指定类型
map.mapValues { (_, value): Map.Entry<String, String> -> "$value" }.forEach { println(it) }
}
区分可变集合的只读视图与实际上真正的不可变集合:
fun main(args: Array<String>) {
val stringList: MutableList<String> = mutableListOf("hello", "world", "bye")
val readOnly: List<String> = stringList
println(stringList) //[hello,world,bye]
stringList.add("welcome")
println(readOnly)//[hello,world,bye,welcome]
println("------------------")
val strings: HashSet<String> = hashSetOf("a", "b", "c", "d")
println(strings.size)//4
println("------------------")
//只读类型是协变的,因为只用于从集合中获取数据,而不会修改集合中的数据
val s = listOf("a", "v")
val s2: List<Any> = s //协变
println("-------------")
//快照:toList扩展方法只是复制原集合中的元素,所以返回的集合就可以确保不会发生变化
val items = mutableListOf("a", "b", "c")
val items2 = items.toList() //不改变原有集合的元素
items.add("d")
println(items) //[a,b,c,d]
println(items2)// [a,b,c]
}
一些集合中常用的方法:
first(),last(),requireNoNulls(),firstOrNull(),lastOrNull(),
fun main(args: Array<String>) {
val items = listOf(1, 2, 3, 4)
println(items.first())//1
println(items.last())//4
items.filter { it % 2 == 0 }.forEach { println(it) }
println("--------------")
val myList= mutableListOf(1,2,3)
println(myList.requireNoNulls())//集合为空抛异常,不为空则打印[1,2,3]
if(myList.none{it>10}){
println("没有大于10的元素")
}
println(myList.firstOrNull())
println(myList.lastOrNull())
println("--------------")
val myMap= hashMapOf("hello" to 1,"world" to 2)
println(myMap["hello"]) //1
val myMap2:Map<String ,Int> =HashMap(myMap)
println(myMap2) //{hello=1,world=2}
}