概述

Scala的集合类能够从三个维度进行切分:

  • 可变与不可变集合(Immutable and mutable collections)
  • 静态与延迟载入集合 (Eager and delayed evaluation )
  • 串行与并行计算集合(Sequential and parallel evaluation )

关于第一个维度我想我们不须要再介绍了。

关于第二维度。是这样解释的, 首先我们来解释一个概念:transformation,集合中有大量的操作都是把一个集合“转换”成还有一个集合,比方map,filter等等。而Eager和Delayed集合的差别在于:Eager集合总是马上为元素分配内存,当遇到一个transform动作时,Eager的集合会直接计算并返回结果。而Delayed集合则会尽可能晚的推迟运行。直到必须返回结果时才去运行。

这一点和Spark RDD操作中的transformation和action非常相似。

在现有的集合里,仅仅有Stream是Lasy的。全部其它的集合都是静态(Eager)载入的。

可是你能够非常easy地把一个静态集合转换成lazy的。那就是创建一个view。

集合类型总览

Immutable Collection

Immutable Seq

Seq主要分两大类:indexed sequences和linear sequences,indexed sequences暗示本类集合在随机读取方面有较高的性能(相似数据结构中的数组)。linear sequences暗示本类集合在head和tail操作和顺序遍历上更有优势(相似于数据结构中的双向列表)

在使用Seq时,默认使用的详细类是List, 使用IndexedSeq时默认使用的详细类是Vector.

scala> val seq = Seq(1,2,3)
seq: Seq[Int] = List(1, 2, 3) scala> val indexedSeq = IndexedSeq(1,2,3)
indexedSeq: IndexedSeq[Int] = Vector(1, 2, 3)

Immutable Set

Immutable Map

Mutable Seq

怎样选择集合类

各种Immutable Sequence的特性比較

各种Mutable Sequence的特性比較

各种Map的特性比較

各种Set的特性比較

注: 本文类图參考自《Beginning Scala》, 表格參考自《Scala Cookbook》

相关阅读

Scala之模式匹配(Patterns Matching)

Scala之Partially Applied Function和Currying

Scala之偏函数Partial Function

Scala之Case Class

Scala之主构造函数

Scala之隐式转换

Scala之集合Collection的更多相关文章

  1. Scala:集合类型Collection和迭代器

    http://blog.csdn.net/pipisorry/article/details/52902549 Scala Collection Scala 集合分为可变的和不可变的集合. 可变集合可 ...

  2. Scala数组| 集合

    arrays :+ 5尾部   头部5 +: arrays TODO 声明不可变数组,不能删; 默认情况下,scala中集合的声明全都是不可变的 val arrays: Array[Int] = Ar ...

  3. scala 可变集合与内存清理的关系

    留坑待填 使用scala.collection.mutable._期间,发现了当程序运行内存开销较多时,使用系统工具进行内存清理,然后程序报出了变量找不到.内存无法访问.数组访问越界,堆栈溢出等多种错 ...

  4. Scala学习——集合的使用和“_”的一些使用(中)

    1.空格加_可以表示函数的原型 命令行代码: scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala ...

  5. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  6. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  7. 5、数组和集合--Collection、Map

    一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1:  类型 [] 数组名 = ne ...

  8. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  9. 在含有null值的复杂类的集合(Collection)中取最大值

    在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Clas ...

随机推荐

  1. C#.NET常见问题(FAQ)-如何生成release版本的程序,生成debug版本的程序

    除了右击项目在生成中配置改成Release还要在顶部切换成Release     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai1 ...

  2. VB.NET版机房收费系统---外观层怎样写

    外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...

  3. 新浪微博SSO登陆机制(转载)

    原文地址: http://www.cnblogs.com/AloneSword/p/3840548.html 最近在使用sina微博时,经常性交替使用 weibo.com 和 t.sina.cm.cn ...

  4. Struts2远程代码执行漏洞预警

    近期struts2 框架再现高危远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638.利用此漏洞可对使用了struts2框架的网站进行远程命令执行,对服务器造成威胁.请相关单位 ...

  5. STL - 容器 - UnorderedSet(一)

    一些简单操作 UnorderedSetTest.cpp #include <unordered_set> #include <numeric> #include ". ...

  6. Java AES 加密工具类

    package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...

  7. 把Linux目录挂载到开发板、设置开发板从NFS启动、取消开发板从NFS启动

    声明:文中"PC虚拟机Linux"是指在PC上安装了虚拟机,然后在虚拟机中装的Linux. 关于NFS的详细介绍可参考:http://www.cnblogs.com/nufangr ...

  8. ORACLE-SQL(一)

      迁移时间:2017年6月1日10:02:43 CreateTime--2017年6月1日09:59:30Author:Marydon 一.SQL语句 (一)基础篇 1.1.1 where 子句 1 ...

  9. you need to know those webs !

    J2me开发网 http://www.j2medev.com/bbs/index.asp J2me社区 http://www.j2meforums.com/forum/ csdn http://www ...

  10. HDUOJ--1874 畅通工程续

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...