scala (5) 可变序列和不可变序列

/**
* 序列分为可变长和不可变长,序列其实就是list,底层是链表结构
* 特点:插入有序,可重复,增加和移除元素很快,查询慢
* 不可变长序列:List
* 可变长序列:ListBuffer
*/
 /**
   * 不可变长序列List ,长度不可变,角标元素也不可变
   */
    val list = List(1,2,3,4,5)
    /*list(0) = 11
    println(list(0))   //  Error:(17, 5) value update is not a member of List[Int]  list(0) = 11*/

    //++ 并没有改变原有的list,只是将连个list序列进行合并形成一个新的list
    val list1 = list ++ List(6,7,8)
    println(list1)   // List(1, 2, 3, 4, 5, 6, 7, 8)
    println(list.toBuffer)  // ArrayBuffer(1, 2, 3, 4, 5)
/**
  * 定义可变长序列
  */
    val listb = ListBuffer(1,2,3,4,5)
    // += 或 -= 后面只能跟一个单个的元素
    listb += 11
    listb -= 1
    println(listb)   //  ListBuffer(2, 3, 4, 5, 11)

    // ++= 或--后面只能跟一个序列 List 或 ListBuffer
    listb ++= List(23)
    listb ++= ListBuffer(25)
    listb.append(34,35)
    println(listb)    // ListBuffer(2, 3, 4, 5, 11, 23, 25,34,35)

    //移除指定角标的元素
    listb.remove(0)
    //从指定角标开始,移除指定个数的元素
    listb.remove(1, 2)
   /**
      * 给list头部添加元素
      */
    val list01 = List(4, 5, 6)
    //注意,这里并不是将元素添加到list01里面,而是将list01和后面的元素(1,2,3)进行合并然后形成一个新的list
    //newList,需要注意的是后面的(1,2,3)是作为一个整体和list0进行合并
    var newlist = list01.:: (1,2,3)     // List((1,2,3), 4, 5, 6)
    newlist = list01.+:(1, 2, 3)        //  List((1,2,3), 4, 5, 6)
    newlist = (1,2,3) ::list01          //  List((1,2,3), 4, 5, 6)
    newlist= (1,2,3) +:list01           //  List((1,2,3), 4, 5, 6)
    newlist = list01 ++ List(1,2,3)     // List(1, 2, 3, 4, 5, 6)

    /**
      * 给list尾部添加元素
      */
    var list02 = List(4, 5, 6)
    //这里也是将(7,8,9)作为整体同list02进行合并添加到尾部,形成一个新的list
    var newList02 = list02.:+(7, 8, 9) //List(4, 5, 6,(7, 8, 9))

    //将7,8,9进行拆分同list02进行合并插入到list02后面去形成一个新的list,原来的list并没有改变
    newList02 = list02 ++ List(7, 8, 9) //List(4, 5, 6, 7, 8, 9)
   /**
      * 序列的常用操作方法
      */
    val lt = List(1, 2, 3, 4, 5)
    //求和
    println(lt.sum) //15
    //最大值
    println(lt.max) //5
    //最小值
    println(lt.min) //1
    //第一个元素
    println(lt.head) //1
    //最后一个元素
    println(lt.last) //5
    //反转序列,形成一个新的list,原来的list不会别改变
    println(lt.reverse) //List(5, 4, 3, 2, 1)
    //拼接
    println(lt.mkString) //12345
    println(lt.mkString(",")) //1,2,3,4,5
    println(lt.mkString("[", ",", "]")) //[1,2,3,4,5]
  
    /**
      * 序列的转换操作
      */
    val list03 = List(1,2,3,4,5,6,7,8)
    list03.map(_ * 2).filter(x => x > 10).distinct.reverse.foreach(println(_))
原文地址:https://www.cnblogs.com/mlfh1234/p/9232399.html