集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下。 本文原文出处: 
  还是先上张图吧,这是我找到的最好的一个关于Scala集合的图了,出自:http://lkumarjain.blogspot.co.id/2015/01/scala-collection-framework.html :
  
  一致的构建风格
  
  在Scala里我们使用一致的简洁的语法实例化一个集合,不管你使用的是一个Trait还是一个具体类,你都可以像这样去实力化:
  
  Traversable(1, 2, 3)
  
  Iterable("x", "y", "z")
  
  Map("x" -> 24, "y" -> 25, "z" -> 26)
  
  Set(Color.red, Color.green, Color.blue)
  
  SortedSet("hello", "world")
  
  Buffer(x, y, z)
  
  IndexedSeq(1.0, 2.0)
  
  LinearSeq(a, b, c)

  
  上述是使用的是一些抽象集合的Trait去构建实例,每一个抽象的Trait在实例化时都有一个对应的具体类被创建出来。
  
  对于具体集合类,你更可以使用上述方法来创建实例了:
  
  List(1, 2, 3)
  
  HashMap("x" -> 24, "y" -> 25, "z" -> 26)
  
  1
  
  2
  
  关于Traversable
  
  Traversable是整个类体系中的顶层父类,它有一个抽象方法:
  
  def foreach[U](f: Elem => U)
  
  1
  
  Traversable还提供了一系列的具体方法,它们分为以下几个类别:
  
  添加: ++, 把两个traversable加在一起,返回的是一个新的traversable
  
  映射操作: map, flatMap, and collect
  
  转换操作: toArray, toList, toIterable, toSeq, toIndexedSeq, toStream, toSet, toMap,
  
  复制操作: copyToBufferand copyToArray
  
  判定集合大小: isEmpty, nonEmpty, size, and hasDefiniteSize
  
  获取元素操作: head, last, headOption, lastOption, find
  
  获取子集操作: tail, init, slice, take, drop, takeWhile, dropWhile, filter, filterNot, withFilter
  
  细分操作: splitAt, span, partition, groupBy
  
  测试元素: exists, forall, count
  
  折叠操作: foldLeft, foldRight, /www.xyyulept.com:, :\, reduceLeft, reduceRight
  
  特殊的折叠操作: sum, product, min, max
  
  字符串操作: mkString, addString, stringPrefix
  
  关于Seq
  
  Seq有两个字的特质,LinearSeq和IndexedSeq, 它们都没有添加新的方法,但是它们提供了不同的性能特征:LinearSeq有很高效的head和tail操作,而IndexedSeq在计算长度和更新方面性能更好,这些是都是很基本的,实际上就是链表和数组之间的区别。
  
  关于List
  
  如果你是从Java刚刚转到Scala, 那么要记住Scala里的List和Java中的List一点也不像!Java中的List,比如ArrayList是一个可变的数组,Scala中的List是一个不可变的链表. 所以后者更适合head,tail,isEmpty方法,所以List很适合递归操作,这在Scala中非常常见。
  
  关于Array,ArrayBuffer和www.chushiyl.cn Vector
  
  Scala中的Array是一个可变的,具有索引的集合,但是它有一个特点,即:一但它的大小被设定,它就无法再改变,这看上去是一个标准的数据机构中的静态数组。
  
  虽然Array经常被用于Scala中的各种示例代码,但是自2.10.x之后,真正应该被广泛使用的是:
  
  Vector: www.ccyl178.com/ 不可变的Array
  
  ArrayBuffer: 可变类的Array

再谈Scala集合的更多相关文章

  1. C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)

    STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...

  2. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

  3. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...

  4. Scala集合类型详解

    Scala集合 Scala提供了一套很好的集合实现,提供了一些集合类型的抽象. Scala 集合分为可变的和不可变的集合. 可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合 ...

  5. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...

  6. Scala函数式编程(三) scala集合和函数

    前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...

  7. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

  8. 再谈Java数据结构—分析底层实现与应用注意事项

    在回顾js数据结构,写<再谈js对象数据结构底层实现原理-object array map set>系列的时候,在来整理下java的数据结构. java把内存分两种:一种是栈内存,另一种是 ...

  9. 再谈js对象数据结构底层实现原理-object array map set

    如果有java基础的同学,可以回顾下<再谈Java数据结构—分析底层实现与应用注意事项>:java把内存分两种:一种是栈内存,另一种是堆内存.基本类型(即int,short,long,by ...

随机推荐

  1. [Lydsy1805月赛]对称数 BZOJ5361

    分析: 这个题,还是蛮有趣的.考虑,如果l,r区间内的所有数出现奇数次,那么[l-1,r]的抑或和等于所得抑或和. 之后怎么维护呢,主席树维护区间抑或和,记得将每个点附上一个ull级别的随机数,之后抑 ...

  2. springboot 定制错误页面

    项目中经常遇到的异常情况 400-Bad Request 401-Unauthorized If the request already included Authorization credenti ...

  3. POJ 1328&&2109&&2586

    这次是贪心(水笔贪心)专题. 先看1328,一道经典的导弹拦截(或者是打击?不懂背景). 大意是说在一个坐标系中有一些点(或是导弹),你要在x轴上建一些东西,它们可以拦截半径为d的圆范围中的点.问最少 ...

  4. Hadoop日记Day16---命令行运行MapReduce程序

    一.代码编写 1.1 单词统计 回顾我们以前单词统计的例子,如代码1.1所示. package counter; import java.net.URI; import org.apache.hado ...

  5. [LOJ#6039].「雅礼集训 2017 Day5」珠宝[决策单调性]

    题意 题目链接 分析 注意到本题的 \(C\) 很小,考虑定义一个和 \(C\) 有关的状态. 记 \(f(x,j)\) 表示考虑到了价格为 \(x\) 的物品,一共花费了 \(j\) 元的最大收益. ...

  6. Azure : 通过 SendGrid 发送邮件

    SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递.并且具有可扩充性和实时分析的能力.常见的用例有:1. 自动回复用户的邮件2. 定期发送信 ...

  7. 自动化部署-Jenkins+SVN+MSBuild 一些补充

    1.ftp的使用 系统管理->插件管理 安装插件Publish Over FTP 系统管理->系统设置 配置ftp参数 如下图 进入任务配置,添加构建后操作 在使用过程中还遇到一个本地防火 ...

  8. GitLab篇之Linux下环境搭建

    之前公司一直在使用微软的VSS和SVN做为源代码管理工具,考虑到VSS和SVN的局限性,个人一直建议我们应该采用Git来管理我们的源代码.Git的好处不多说相信大家也都知道的.Git不仅仅是一个源代码 ...

  9. 《杜增强讲Unity之Tanks坦克大战》1-准备工作

    0.案例介绍 0.1开始界面   点击Play Now 进入游戏界面   左边的坦克使用ws控制前后移动,ad键左右旋转,空格键开火   右边的坦克使用方向键上下控制前后移动,方向键左右键实现左右旋转 ...

  10. php OPcache

    众所周知php是一种解释型语言,它的执行可分为如下几个流程: Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens) Parsing, 将Tokens转换成简单而有意义的表达式 ...