/**
* 序列分为可变长和不可变长,序列其实就是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(_))