1、具体的不可变集合实体类
List(列表)
是一种有限的不可变序列式。提供了常数时间的访问列表头元素和列表尾的操作,并且提供了常数时间的构造新链表的操作,该操作将一个新的元素插入到列表的头部。其他许多操作则和列表的长度成线性关系。
List有两种构造方式:一种是通 ::操作符,另一种是 aply()
/* ---示例代码----*/
scala> val list = 1 ::(2::(3::Nil))
list: List[Int] = List(1, 2, 3)
scala> val list:List[Int] = List(1,2,3,4)
list: List[Int] = List(1, 2, 3, 4)
/* ---示例代码----*/
Stream(流)
stream结构可以无限长。stream被定义为懒惰计算,其toString方法被设计为不去做任何额外的东西。
/* ---示例代码----*/

scala> val str = 1 #:: 2 #:: Stream.empty
str: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> val str = Stream(1,2,4)
str: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> def fibFrom(a:Int, b:Int) :Stream[Int] = a #:: fibFrom(b,a+b)
fibFrom: (a: Int, b: Int)Stream[Int] scala> val fibs = fibFrom(1,1).take(10)
fibs: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> fibs.toList
res1: List[Int] = List(1, 1, 2, 3, 5, 8, 13, 21, 34, 55) /* ---示例代码----*/
Vector(向量)
vector向量是线性序列与索引序列的折中,使线性序列能够更加高效随机访问列表,Vector的结构是不可变的,每次update操作都需要重新创建一个新的Vector。
由于vector在快速随机选择和快速随机更新的性能方面做到很好的平衡,所以它目前正被用作不可变索引序列的默认实现方式。
/* ---示例代码----*/

scala> val vector = Vector(1,2,45,5)
vector: scala.collection.immutable.Vector[Int] = Vector(1, 2, 45, 5)
scala> vector.updated(2,3)
res4: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 5)
scala> vector
res5: scala.collection.immutable.Vector[Int] = Vector(1, 2, 45, 5) scala> collection.immutable.IndexedSeq(1, 2, 3)
res2: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3) /* ---示例代码----*/
2、具体可变容器类
ArrayBuffer
数组缓冲可以进行高效的尾插数据。
/* ---示例代码----*/

scala> val buf = scala.collection.mutable.ArrayBuffer.empty[Int]
buf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> buf += 1
res32: buf.type = ArrayBuffer(1) /* ---示例代码----*/
ListBuffer
ListBuffer与ArrayBuffer的区别在ListBuffer内部实现是链表而非数组
 

群名称:开发交流学习

群   号:45514590

scala学习之第二天:可变容器与不可变容器的特性与应用的更多相关文章

  1. scala学习笔记(1):基本语法与容器

    1 var 可变,val 不可变 var (a,b) = (10,20) 分别对a,b赋值 a=10, b=20 var a,b = (10,20)则 是a=(10,20) b=(10,20) 2 L ...

  2. scala学习手记17 - 容器和类型推断

    关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var ...

  3. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  4. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  5. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  6. Scala学习笔记--Actor和并发

    感谢博主lyrebing  博文地址:http://blog.csdn.net/lyrebing/article/details/20446061 1.  Actor用法 1.1 Actor的基本使用 ...

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

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

  8. Spark基础-scala学习(一、入门)

    Scala解析器的使用 REPL:Read(取值)-> Evaluation(求值)-> Print(打印)->Loop(循环).scala解析器也被称为REPL,会快速编译scal ...

  9. Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合

    前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...

随机推荐

  1. 【读书笔记】iOS-UIWindow-密码框

    一,工程结构,如下图所示: 二,代码 PasswordInputWindow.h #import <UIKit/UIKit.h> @interface PasswordInputWindo ...

  2. iOS:自己写的一个星级评价的小Demo

    重新整理了下自己星级评价的Demo,可以展示星级评价,可以动态修改星级. github的地址:https://github.com/hunterCold/HYBStarEvaluationView a ...

  3. Mac下安装Django

    用到一个Python写的后台服务,需要用到Django,参考Django安装文档,配置过程如下: 1.下载一个用来安装和管理Python包的工具“pip”; 2.下载完成后,运行安装脚本,注意需要管理 ...

  4. ubuntu15.10 给解压版的eclipse安装桌面快捷方式

    在桌面用vi 建立eclipse.desktop文件,并赋予权限 sudo chmod  u+x  /home/liujl/Desktop/eclipse.desktop [Desktop Entry ...

  5. Effective Java 77 For instance control, prefer enum types to readResolve

    The readResolve feature allows you to substitute another instance for the one created by readObject ...

  6. 你真的说的清楚ArrayList和LinkedList的区别吗

    参见java面试的程序员,十有八九会遇到ArrayList和LinkedList的区别?相信很多看到这个问题的人,都能回答个一二.但是,真正搞清楚的话,还得花费一番功夫. 下面我从4个方面来谈谈这个问 ...

  7. 初次使用Docker的体验笔记

    一.前言 Docker容器已经发布许久,但作为一名程序员如今才开始接触,实在是罪过--        在此之前,我还没有对Docker进行过深入的了解,对它的认识仍停留在:这是一种新型的虚拟机.这样的 ...

  8. 解决Mac Chrome打开HTTPS证书错误问题

    goagent代理,在chrome下中总提示“该网站的安全证书不受信任” 并且没有 “继续访问” 的按钮. 解决方法 一.打开[应用程序]>[实用工具]>[钥匙串访问],并在左侧导航选择[ ...

  9. 大型文档源文件拆分编辑编译\include{filename}

    大型文档,如果把所有的文字都录入在同一个.tex文件中,那个文件的体积是不可估量的,文件的结构式混乱不堪的,文字的定位也是令人头疼的.幸亏latex提供了结构化的处理命令---include. 命令\ ...

  10. Lua环境

    1.前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点 ...