scala理解可变与不可变

咱们定义变量的时候分为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 //转为不可变列表
    }
}