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) //
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) 可变序列和不可变序列的更多相关文章
- Python中的可变、不可变对象和赋值技巧序列解包
可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...
- scala可变var与不可变val的理解
我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...
- Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...
- 理解python可变类型vs不可变类型,深拷贝vs浅拷贝
核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutable):数字,字符串,元组 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 ...
- python可变对象和不可变对象的解释
数据类型分为可变.不可变.可变对象表示可以原处修改该数据对象,不可变对象表示必须创建新对象来保存修改后的数据. 在基础数据类型中: 数值.字符串.元组.frozenset是不可变对象 列表.set.d ...
- 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
[转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...
- python可变类型和不可变类型
原文地址:http://www.cnblogs.com/huamingao/p/5809936.html 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutab ...
- python可变类型和不可变类型,深拷贝vs浅拷贝
转载:https://www.cnblogs.com/huamingao/p/5809936.html 核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(un ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...
随机推荐
- [日常]蒟蒻的高一生活 Week 1~3
博主在三周前成功晋级为高中生OwO终于不再是假的HZOIer感受一波HZ的真正生活...(然而实际上级部不少监督一直没启动23333) (然而三周过去好多事情都忘了QAQ瞎写好了(逃)) Week 1 ...
- Chapter 2 Secondary Sorting:Detailed Example
2.1 Introduction MapReduce framework sorts input to reducers by key, but values of reducers are arbi ...
- C++课堂作业二之反转链表
1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...
- Current urgent plan(3/30)
1. resume improving 1.1 project from Udacity 1.2 project from class 1.3 find career center's help 1. ...
- angular2 Router类中的路由跳转navigate
navigate是Router类的一个方法,主要用来路由跳转. 函数定义 navigate(commands: any[], extras?: NavigationExtras) : Promise` ...
- less使用总结
15年自学了 less ,可是一直没用,就忘记了.后来抱着提高 css 开发速度的目的,又去学习了 less ,学完马上用,效果立竿见影,记得也牢了.刚开始学习前,我们总会问自己一个问题,学习它有什么 ...
- CyclicBarrier和CountDownLatch笔记
一.CyclicBarrier的使用 Barrier是栅栏,障碍物的意思,这里将它理解为栅栏. Cyclic是重复利用的意思. CyclicBarrier:可重复利用的栅栏.这里附上官方文档的一句解释 ...
- ZTree 使用范例
http://www.treejs.cn/v3/api.php zTree v3.x 入门指南 Api 文档 https://github.com/zTree/zTree_v3 下载ZTree v3 ...
- Inno Setup添加中文安装语言文件
如果你不添加中文安装语言文件,你编译生成的安装包的语言是不会有中文. 一,打开软件安装目录下的Languages文件夹下,有如下好多文件,可是就是没有Chianese.isl. 好了,你只需要随便拷贝 ...
- 在Windows 10中更改网络连接优先级
查看接口列表 (也可使用 如下) 选择网络连接,然后单击右侧的箭头以更改网络连接优先级. 可以参考之前的部分 链接在此 更改单个wi-fi连接顺序可以使用如下