immutable集合与mutable集合一览图
说明
1)val 和 var 的区别:val 类型的变量引用不可更改,类似于 java 变量加了 final 修饰,但是引用对象内容可以改变;而 var 类型的变量引用可以更改,引用对象内容也可以更改
2)immutable 集合与 mutable 集合的区别:mutable内容可以修改,而 immutable 集合初始化之后,内容是不能修改的
3)有一种情况是如果将 immutable 集合定义为 var 类型的变量,内容是可以"修改"的
4)其实 immutable 对象的内容并没有改变,而是因为执行 map1 += (“Tom” -> 30) 之后在堆内存中又新建了一个对象,这时候的变量map的引用已经改变,指向了不同的对象
object ImmutableAndVar {
def main(args: Array[String]): Unit = {
var map1 = Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> "北京")
println(map1.hashCode()) //1525725571
//其实immutable对象的内容并没有改变,
//而是因为执行 map1 += ("Tom" -> 30) 之后在堆内存中又新建了一个对象,
//这时候的变量map的引用已经改变,指向了不同的对象
map1 += ("Tom" -> 30)
println(map1.hashCode()) //1632442179
}
}
immutable map 与 mutable map 的相互转化
object ImmutableToMutable {
def main(args: Array[String]): Unit = {
//immutable.Map to mutable.Map
val m = collection.immutable.Map(1 -> "one", 2 -> "Two")
val n = collection.mutable.Map(m.toSeq: _*)
n += (3 -> "three")
//mutable.Map to immutable.Map
val o = collection.mutable.Map(1 -> "one", 2 -> "Two")
val p = o.toMap
//p += (3 -> "three") //报错
}
}