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

scala (5) 可变序列和不可变序列的更多相关文章

  1. Python中的可变、不可变对象和赋值技巧序列解包

    可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...

  2. scala可变var与不可变val的理解

    我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...

  3. Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...

  4. 理解python可变类型vs不可变类型,深拷贝vs浅拷贝

    核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutable):数字,字符串,元组 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 ...

  5. python可变对象和不可变对象的解释

    数据类型分为可变.不可变.可变对象表示可以原处修改该数据对象,不可变对象表示必须创建新对象来保存修改后的数据. 在基础数据类型中: 数值.字符串.元组.frozenset是不可变对象 列表.set.d ...

  6. 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    [转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...

  7. python可变类型和不可变类型

    原文地址:http://www.cnblogs.com/huamingao/p/5809936.html 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutab ...

  8. python可变类型和不可变类型,深拷贝vs浅拷贝

    转载:https://www.cnblogs.com/huamingao/p/5809936.html 核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(un ...

  9. 『无为则无心』Python序列 — 24、Python序列的推导式

    目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...

随机推荐

  1. C#用ckplayer.js播放 MP4格式视频实现 边加载边播放

    MVC设计模式下 在View页面里面使用ckplayer.js 加载视频 ,在MP4格式视频上传之后 我发现某些视频可以边加载边播放 但是有一些又不行,找了下原因是因为视频的元数据信息在第一帧的时候就 ...

  2. SharePoint问题杂集——要创建计时器作业,必须运行SVC

    问题场景:在SharePoint2010服务器上使用PowerShell部署解决方案时,遇到问题: 解决办法是进入控制面板----管理工具----服务,找到SharePoint 2010 Admini ...

  3. 解决问题,链表finish

    从一个不懂链表,到反反复复改了不下50遍,提交该题页数更是突破了五页,从周三下午到周五中午的面向对象课前的20分钟,终于把这道题AC了,其实这题本来是原来C语言综合实验的一道题,但是本次在PAT上的审 ...

  4. Java 字符流与基本IO

    字符流基类 java.io包中专门用于字符流处理的类,是以 Reader 和 Writer 为基础派生的一系列类.字符流以字符为单位,根据码表映射字符,一次可能读多个字节,只能处理字符类型的数据.Re ...

  5. 【Alpha】总结 - (待更)

    Alpha总结 1. 个人总结 PM & BackEnd - 胡武成 BackEnd - 吴松青 Web - 孙浩楷 Web - 练斐弘 App - 胡冰 App - 黄世辉 UI - 张旗 ...

  6. Kali-linux使用社会工程学工具包(SET)

    社会工程学工具包(SET)是一个开源的.Python驱动的社会工程学渗透测试工具.这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准.SET利用人们的好奇心.信任. ...

  7. JDK(三)JDK1.8源码分析【排序】mergeSort

    归并排序是JDK对象数组的排序算法之一,接下来开始分析JDK的归并排序算法. /** * 将指定范围的对象数组按自然顺序升序排序 * * Src is the source array that st ...

  8. 【luogu P3953 逛公园】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3953 题外话:感觉2017年神题好多..这还不是最神的一道,真在考场上我也就写个最短路计数暴力了.现在在大佬 ...

  9. 用javascript调用表单验证事件时,为什么return false了还是把表单submit了?

    表单提交前,都会有定义一个验证的方法以对用户提交的内容进行限定,今天写到了这个,但出现了一个好郁闷的东西,就是一点提交了,调用我自己写的一个CheckForm()方法时,我明明写了return fal ...

  10. struts2的动态方法调用(DMI)和通配符映射

    动态方法调用   1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即 ...