scala学习第十三章 集合

来源:互联网 发布:协作机器人 知乎 编辑:程序博客网 时间:2024/06/06 17:31

scala集合架构:

scala集合有三类:,分别为序列(Seq),集(Set)和映射(Map)




scala.collection.immutable(不可变集合)


scala.collection.mutable(可变集合)


集是无先后次序的集合,不重复元素的结合

+将原书添加到无先后次序的集合中;+:和:+向前或向后追加到序列;++将两个集合串接在一起;-和--移除元素

seq是一个有先后次序的值的序列,比如数组或列表,IndexedSeq允许我们通过整型的下标快速的访问任意元素.Sorted中,元素以某种排过序的顺序被访问.


相对于Java的一些改进:

1.映射属于一个继承层级而不是一个单独的层级关系.

2.IndexSeq是数组的超类型,但不是列表的超类型,以便于区别.


scala优先采用不可变集合,

9::4::2::Nil

::是右结合的,列表将从末端开始构建

如果想要把列表中的某个节点编程列表中的最后一个节点,你不能将next引用设为Nil,而应该将它设为LinkedList.empty.也不要将它设为null,不然你在遍历该链表是会遇到空指针错误


对于列表,你可以用+:而不是::来保持与其他结合操作的一致性,但有一个例外:模式匹配(case: h::t)不认+:操作符


zip拉链操作

如果一个集合比另一个短,那么结果中的对偶数量和较短的那个结合的元素数量相同.例如:

List(5,20,9).zip(List(20,2))

将得到

List((5,10),(20,2))


#::操作很像是列表的::操作,只不过它构建出来的是一个流


并行集合:

如果并行运算修改了共享的变量,则结果无法预知.不要更像一个共享的计数器:

var count = 0for(c <- coll.par){ if (c%2 == 0) count +=1} //错误!


0 0
原创粉丝点击