`
wbj0110
  • 浏览: 1603116 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Scala——集合

 
阅读更多

主要的集合特质

Scala中所有的集合都扩展了Iterable特质。集合又可以分为三类:有先后次序的序列Seq;值的集合Set;键值对构成的对偶的映射Map。三类集合下分别还实现了特殊访问方式的特质:可以由下标来进行随机访问的IndexedSeq;可按照顺序访问的SortedSet;可按顺序访问的SortedMap。

迭代器

在迭代器之前,已经介绍了集合的不少使用方法,多是带有函数式特征的。而且在Scala中,也更加鼓励使用这些方法来进行操作。在面向对象编程中,迭代器是更加常见的,用来操作集合的方法。

对于完整构造需要很大开销的集合来说,使用迭代器是个不错的想法。比如在用Source.fromFile读取文件的时候。使用迭代器时,只有在需要的时候才去取元素,所以不会一次性将文件全部读取到内存。而使用迭代器时,需要注意的当然是迭代器是否有效,以及迭代器的指向位置。

流(A3)

流,stream,是一个尾部被懒计算的不可变列表。流会缓存下中间计算过的值,所以可以重新访问已经访问过的值,这点是与迭代器不同的。

懒视图

其他的集合也可以得到懒(lazy)计算相似的效果。使用集合的view方法。懒视图不会存储已经计算过的值。

懒视图可以用来避免构建大型中间集合,适合于处理需要多种方式进行变换的大型集合。

在上面的代码中,就避免了从pow方法中构建的中间集合map。

线程安全的集合

可变集合可以混入特质来使集合的操作变为同步的。这样的特质共有六个,都以Synchronized开头,详细的我就不列了。

需要注意的是,混入特质后,只是将操作变为同步的,并不能保证集合是线程安全的。(比如,并发进行修改和遍历集合。)

通常可以使用java.util.concurrent包中的类来保证线程安全,而且可以将这些集合也转换成Scala集合来使用(使用JavaConversions)。

并行集合

在Scala中可以方便地得到一个集合的并行实现。

上面的代码中coll是一个大型集合,而par方法会得到集合的并行实现——会尽可能地并行地执行结合方法。将上面的求和来说明,集合会被分成多个区块,然后由多个线程来对这些区块来进行求和,最后将区块的结果汇总得到最终的和。

par方法返回的是ParIterable的子类型,但ParIterable并不是Iterable的子类型。可以使用ser方法将并行集合转换回串行集合。

http://nerd-is.in/2013-09/scala-learning-collections/


本章的内容虽然多,但基本都是些用久了没不会有问题的内容。不过集合用来增删的操作真是有点多啊。

 

分享到:
评论

相关推荐

    Scala—— 9.伴生对象apply方法

    在Scala编程语言中,伴生对象(Companion Object)与类有着独特的关联关系,它们可以在同一个源文件中定义,共享类的私有信息。...在实际开发中,`apply`方法常用于创建集合、配置对象等场景,使得代码更加易读和易用。

    Scala—— 2. 流程控制

    基础的`for`循环可以迭代范围或集合,如: ```scala for (i ) println(i) ``` `for`循环还可以包含条件,如`for (i != 2)`,以及多个迭代器,如`for (i ; j )`。循环赋值允许在循环中同时更新变量,如`for (i ; j = ...

    快学scala习题及答案详解

    至于压缩包中的文件名称列表——"快学Scala 课后习题答案集合"——表明这是一个完整的习题集,包含了所有章节的课后练习,这对于巩固理论知识和提高编程技能至关重要。 在学习Scala的过程中,这些习题将覆盖诸如...

    scala连接redis哨兵模式 demo 使用scala的redis库(csdn)————程序.pdf

    4. 配置哨兵服务器:在Scala代码中,需要指定一个由哨兵实例组成的集合,以及主服务器名称、密码(如果有的话)、以及数据库索引。 5. 数据操作:通过实例化后的SentinelMonitoredRedisClient对象,程序可以执行...

    scala核心编程总结

    4. **Data Structures(数据结构)**:Scala提供了一套丰富的内置数据结构,包括但不限于数组(Array)、列表(List)、集合(Set)和映射(Map)。这些数据结构既支持不可变版本也支持可变版本,以适应不同的场景需求。 5....

    Scala代码示例

    #### 结论:Scala——未来的编程语言? 通过上述章节的介绍,我们可以看到Scala不仅拥有强大的函数式编程能力,同时还兼顾了面向对象编程的优点,再加上其对并行和并发编程的支持,使其成为一种极具潜力的编程语言...

    Scala.pdf中文高清第二版

    5. **Actor模型与Akka框架**:Scala是Akka框架的主要编程语言,Akka提供了一种高效的并发模型——Actor,用于构建分布式、容错的应用。Actor模型通过消息传递实现并发,并且具有轻量级线程和内存管理特性。 6. **...

    快学scala(内容高清原版带目录)

    "快学Scala(黑马老师推荐)"这个压缩包很可能是由知名的教育机构——黑马程序员提供的Scala学习资料,包含了高清的课程内容,旨在帮助学习者快速掌握这门语言。 在Scala中,类和对象是核心概念。类用于定义对象的...

    Scala编程完整版.rar

    "Scala编程完整版.rar"这个压缩包包含了一份详细的Scala学习资料——"Scala编程完整版.pdf",对于想要深入理解和掌握Scala的人来说,这是一个宝贵的资源。 在Scala中,类和对象是核心概念。类定义了对象的状态和...

    面向 Java 开发人员的 Scala 指南系列.rar

    8. **Dotty 和 Scala 3**:Scala 社区正在开发下一代 Scala 版本——Scala 3(以前称为 Dotty),它旨在解决 Scala 2 中的一些复杂性和不一致性,提供更好的互操作性与简化语法。 9. **Scalactic 和 ScalaTest**:...

    Scala in Depth

    本书由Scala之父作序推荐,深入探讨了Scala里几个较为复杂的领域,包括类型系统的高阶内容、隐式转换、特质的组合技巧、集合、Actor、函数式编程的范畴论等,而且不是干巴巴地讲述语言和库的概念。本书示例丰富,是...

    Scala编程-前13章-p183.7z

    函数式编程的一个核心概念——高阶函数,也会在此处被介绍,它是处理集合数据的强大工具。 接下来,你将探索Scala的面向对象特性,如类、对象、继承、封装和多态。Scala中的类和对象设计十分灵活,允许定义特质...

    Scala_2.7.6_API_离线精简2009.09.15.rar

    5. **Actor模型**:在Scala 2.7.x版本中,已经内置了轻量级并发模型——Actor。Actor是一种处理并发和异步操作的模型,每个Actor都有自己的消息队列,通过消息传递与其他Actor进行通信,从而简化了并发编程的复杂性...

    大数据课程-Scala编程基础-2.Scala语言基础_lk_edit.ppt

    《Scala编程基础——掌握大数据时代的基石》 Scala作为一门强大的函数式编程语言,因其与Java虚拟机的无缝集成,成为了大数据处理领域中的首选语言之一。本篇将详细讲解Scala的基础语法,包括变量与常量、数据类型...

    Programming.in.Scala.2nd.Edition

    ### 《Programming in Scala》第二版 —— Scala编程权威指南 #### 一、书籍概述 《Programming in Scala》第二版是一本深入浅出地介绍Scala编程语言的经典教材。该书由Scala之父Martin Odersky与Lex Spoon及Bill ...

    spark的scala练习代码(里面都有详细注解)

    首先,我们来看看Spark的核心组件——弹性分布式数据集(Resilient Distributed Datasets, RDD)。RDD是Spark处理数据的基本单元,它是一个不可变、分区的记录集合,可以在集群中的多台机器上进行并行操作。通过使用...

    积分java源码-scala-collection-laws:为整个集合库部分自动生成测试

    警告——这是对早期版本的完全重写! 早期版本的 scala-collection-laws 有几个奇怪的基于文本的 DSL。 这已被放弃,取而代之的是带有sourcecode插件的纯 Scala 代码,有助于生成有意义的自动报告。 快速开始 克隆存...

    大数据技术实践——Spark词频统计

    此外,Spark与Scala的紧密结合使得开发更为便捷,开发者可以像处理本地集合一样处理分布式数据集。Spark还支持多种工作模式,如Standalone、Mesos和Yarn,可以根据需求选择资源管理器。 **二、Spark运行流程** 1. *...

    Scala语法(iterator迭代器)

    scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可以从集合获取一个迭代器 迭代器的两个基本操作 hasNext——查询容器中是否有下一个元素 next——返回...

Global site tag (gtag.js) - Google Analytics