咱们定义变量的时候分为var可变变量和val不可变变量。
咱们使用容器的时候也分为可变容器和不可变容器。
List和Tuple自己就是不可变的,set和map分为可变和不可变的,默认为不可变。java
//不报错 var list = scala.collection.immutable.List(“Hello”,“World”); list += “Scala”;
//报错 val list = scala.collection.immutable.List(“Hello”,“World”); list += “Scala”;
//不报错 var list = scala.collection.mutable.ListBuffer(“Hello”,“World”); list += “Scala”;
//不报错 val list = scala.collection.mutable.ListBuffer(“Hello”,“World”); list += “Scala”;
首先理解immutable和mutable,前者为不可变,后者为可变。这里面的可变性指的是在原List上是否可变,可是若是我改变了该List值,赋值给另一个List,那是能够的。
接下来理解val,var,前者为不可变,后者为可变,这个指的的后面List的指向,val指向的地址值不可变,var指向的地址值可变。web
如上四种场景,只有第二种,又想让List指向的地址值不可变,又想替换不可变的List值,那是不行的,出现了矛盾,能够将val修改成var,或者将immutable修改成mutable,均可行。数组
//分享以前学习scala的一些代码笔记 package com.bingo import java.util import scala.collection.mutable.{ArrayBuffer, ListBuffer} object Collection { def main(args: Array[String]): Unit = { //定长数组 //scala中 数组的泛型使用[]来指定 //使用() 来获取元素 //注意:不能添加 删除 只能修改 val array1 = new Array[Int](10) val array2 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) println(array2(5)) for (i <- 0 until array2.length) print(array2(i) + " ") println(util.Arrays.toString(array2)) //变长数组 //能够增删改查 val arraybuffer1 = ArrayBuffer[Int](10) val arraybuffer2 = ArrayBuffer(1, 2, 3, 4, 5) println(arraybuffer2(1)) //添加 删除的话改为- --号 arraybuffer2 += (6, 7, 8) // arraybuffer2 ++= Array(9,10) arraybuffer ++= ArrayBuffer(11,12) for (i <- 0 until arraybuffer2.length) print(arraybuffer2(i) + " ") arraybuffer2 -= arraybuffer2(3) for (i <- 0 until arraybuffer2.length) print(arraybuffer2(i) + " ") println(arraybuffer2.length) //数组操做 函数 println(arraybuffer2.max) println(arraybuffer2.min) println(arraybuffer2.sum) val arraybuffer3 = arraybuffer2.sorted for (i <- 0 until arraybuffer3.length) print(arraybuffer3(i) + " ") val arraybuffer4 = arraybuffer2.sorted.reverse for (i <- 0 until arraybuffer4.length) print(arraybuffer4(i) + " ") //元组 能够用来包含一组不一样类型的值 val tuple1 = (1, 2, "java", "scala", 5) val tuple2 = "nihao" -> 2 //若是只有两个元素 println(tuple1._4) //映射Map 不可变 val map1 = Map(1 -> "zhangsan", 2 -> "lisi", 3 -> "wangwu") val map2 = Map((1, "zhangsan"), (2, "lisi"), (3, "wangwu")) println(map1(1)) for (i <- map1.keys) println(map1(i)) //映射Map 可变 var map3 = scala.collection.mutable.Map(1 -> "zhangsan", 2 -> "lisi", 3 -> "wangwu") var map4 = scala.collection.mutable.Map((1, "zhangsan"), (2, "lisi"), (3, "wangwu")) map3(2) = "xubin" println(map3(2)) println("-------------------------") map3 += (4 -> "bingo", 5 -> "xms") for (i <- map3.keySet) //遍历方式一 println(map3(i)) map3 -= 2 println("-------------------------") for (i <- map3.keys) //遍历方式二 println(map3(i)) for ((k, v) <- map3) //遍历方式三 println(k + "->" + v) //set集合 不可变set val set1 = scala.collection.immutable.Set[Int]() var set2 = scala.collection.immutable.Set[Int](1, 2, 3, 4, 5) println(set2.size) for (i <- set2) print(i + " ") set2 += 6 set2 -= 5 for (i <- set2) print(i + " ") println(set2 -- Set(2, 3)) println(set2 ++ Set(6, 7, 8)) println(set2 & Set(3, 4, 5, 6)) println("====================") //set集合 可变set val set4 = scala.collection.mutable.Set[Int]() val set5 = scala.collection.mutable.Set[Int](1, 2, 3, 4, 5) println(set5.size) for (i <- set5) print(i + " ") set5 += 6 set5 -= 5 for (i <- set5) print(i + " ") println(set5 -- Set(2, 3)) println(set5 ++ Set(6, 7, 8)) println(set5 & Set(3, 4, 5, 6)) //list列表 不可变列表 val list1 = scala.collection.immutable.List(1, 2, 3, 4, 5, 6) val list2 = Nil //建立一个不可变空列表 val list3 = 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: Nil //list列表 可变列表 val list4 = scala.collection.mutable.ListBuffer(1, 2, 3, 4, 5, 6) val list5 = Nil //建立一个不可变空列表 val list6 = 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: Nil list4 += 7 list4 += (8, 9) list4 ++= List(10, 11) list4 ++= ListBuffer(12, 13) val arr = list3.toArray //转为数组 val list5 = list3.toList //转为不可变列表 } }