设为首页 加入收藏

TOP

scala学习之第二天:可变容器与不可变容器的特性与应用
2017-10-10 12:10:50 】 浏览:2868
Tags:scala 习之 第二 可变 容器 特性 应用
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内部实现是链表而非数组
 

开发交流学习

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇scala学习之第三天:数组的特性与.. 下一篇复制本地文件到HDFS本地测试异常

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目