再谈Scala集合
集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,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集合的更多相关文章
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...
- 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...
- Scala集合类型详解
Scala集合 Scala提供了一套很好的集合实现,提供了一些集合类型的抽象. Scala 集合分为可变的和不可变的集合. 可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合 ...
- 【字符串算法1】 再谈字符串Hash(优雅的暴力)
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...
- Scala函数式编程(三) scala集合和函数
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...
- 小数据池 is和== 再谈编码
昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...
- 再谈Java数据结构—分析底层实现与应用注意事项
在回顾js数据结构,写<再谈js对象数据结构底层实现原理-object array map set>系列的时候,在来整理下java的数据结构. java把内存分两种:一种是栈内存,另一种是 ...
- 再谈js对象数据结构底层实现原理-object array map set
如果有java基础的同学,可以回顾下<再谈Java数据结构—分析底层实现与应用注意事项>:java把内存分两种:一种是栈内存,另一种是堆内存.基本类型(即int,short,long,by ...
随机推荐
- DynamicDataDisplay 实时曲线图的使用和沿轴移动的效果
原文:DynamicDataDisplay 实时曲线图的使用和沿轴移动的效果 由于项目需要,最近在找关于绘制实时曲线图的文章,但看了很多自己实现的话太慢,所以使用了第三方控件来实现(由 ...
- 路遥眼里的河南人<平凡的世界>
路遥,一个作过农民,当过小学教师,用平凡的生命,却写出不平凡的小说<平凡的世界>,他喜欢夜的宁静,喜欢在夜里思考,他说只有在夜里我们才是最真实的自己.所以他喜欢在夜里创作,这部小说也是在这 ...
- Linux中tty、pty、pts的概念区别 转载
基本概念: > tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西 ...
- Egret(白鹭引擎)——“TypeError: Cannot read property 'asCom' of null”
前言 相信我,这个错误新手都不陌生:TypeError: Cannot read property 'asCom' of null 还有,一定要看我上一篇,哦不(人家应该是报了这个错,才找到看到这篇文 ...
- grunt源码解析:整体运行机制&grunt-cli源码解析
前端的童鞋对grunt应该不陌生,前面也陆陆续续的写了几篇grunt入门的文章.本篇文章会更进一步,对grunt的源码进行分析.文章大体内容内容如下: grunt整体设计概览 grunt-cli源码分 ...
- Houdini Linux Crack
安装 破解停止服务 /etc/init.d/sesinetd stop 刪除sesinetd | 拷贝破解文件sesinetd | 修改sesinetd的权限(读写权限) cd /usr/lib/se ...
- Nextcloud13私有云盘安装指南
一.环境说明: ※操作系统版本CentOS 7.5 Minimal-1804 ※操作系统版本已经使用163 YUM源 ※ Nextcloud版本 13.05 ※ 数据库使用MariaDB,安装在同一台 ...
- Vigenere加密
Vigenere加密法原理很简单,实现起来也不难.与普通的单码加密法不同,明文经过加密之后,每个字母出现的频率就不会有高峰和低峰. 密钥中字母代表行和明文中的字母代表行.在vigenere表中找到对应 ...
- 作业要求20160901 从edu.cnblogs.com中抄过来的,备忘
[已完成] 杨贵福 发布于 2016-09-01 21:51 开通技术博客,博客园 cnblogs 关注 杨贵福 younggift,回贴 "构建之法东北师大站,继续 2016秋" ...
- React组件继承的由来
没有显式继承的时候我们这么写: import * as React from "react"; export interface HelloProps { compiler: st ...