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.集 ...
随机推荐
- Java学习---Pinyin4j使用手册
一般用法 pinyin4j的使用很方便,一般转换只需要使用PinyinHelper类的静态工具方法即可: String[] pinyin = PinyinHelper.toHanyuPinyinStr ...
- HTML学习---基础知识学习
1.1. HTML 1.为什么要有HTML? "Hello" "<h1>Hello</h1>" - 浏览器渲染时使用一套HTML规则, ...
- Mysql常用函数汇总-经典实用
以下是对mysql中的常用函数进行了汇总介绍.需要的朋友可以过来参考下. 一.数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x ...
- ArcGIS的网络分析
ArcGIS的网络分析分为两类:传输网络(Network Analyst)和效用网络(Utility Network Analyst). 一.从应用上来考虑: 1.传输网络常用于道路.地铁等交通网络分 ...
- C++通过Callback向C#传递数据
现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从调用方式看也 ...
- background-size之CSS Sprite巧用
前言 background-size:规定背景图片的尺寸.为CSS3属性.so...万恶的ie浏览器,此刻的内心一定是崩溃的!说实话,作为一个前端的coder,面对CSS3如此多的炫酷效果,我不能用起 ...
- 鸡肋提权之变态root利用
你急有毛用,我电脑没带,怎么搞? 联系了基友adminlm牛看看吧,他说有防护软件啥的,有root,无法UDF,于是我让他去Mof,经历一番周折,知道了,对mof目录也锁定了权限,无法用root导出m ...
- 4、集合set的功能介绍
集合是易变(可改变)和无序聚集.集合set支持迭代,很像无值(或仅有键的)字典,用花括号表示{}. 1.集合的创建: 可以通过调用内建函数set()来创建,及向其传递一个迭代,该迭代的项目成为形成 ...
- P2258 子矩阵
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第 222 . 444 行和第 222 ...
- 2、Dubbo-核心概念
dubbo核心概念 2.1).简介 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC框架, 它提供了三大核心能力:面向接口的远程方法调用 ...