scala 简要:集合

所有集合都是iterable的,seq是有先后次序的序列(如数组和列表),Set是没有先后次序的序列,map是一种键值对偶。scala优先采用不可变集合,::操作符从给定的头和尾创建一个新的列表。如果要把列表中的某个节点变成列表中的最后一个节点,不能将next引用设为nil,而应该设为LinkedList.empty.

已排序的集使用红黑树实现的,scala2.9没有可变的已排序集,要用到java.util.TreeSet

Scala 关于添加和移除的操作符:
1)向后(:+)或向前(+:)追加元素到序列中
2)添加(+)元素到无先后次序的集合中
3)用-移除元素
4)用++和--批量添加和移除元素
5)对于列表,优先使用::和:::
6)改值操作有+=,++=,-=和--=

对于集合,推荐++,&和--,尽量不用++:,+=:和++=: 操作方式。

初始值和操作符是两个分开定义的柯里化参数,这样scala就能用初始值类型来推断操作符的类型定义。任何while循环都可以用折叠来替代,对于那些完整构造需要很大开销的集合而言,迭代器作用大,而流将缓存访问过的行,允许你重新访问他们。

对于数组,缓存,哈希表,平衡树而言,基于par方法的并行实现很高效。

时间: 2024-10-12 17:25:12

scala 简要:集合的相关文章

Scala的集合

1.集合基础概念 ? (1)集合的相关介绍 ? ? Scala的集合有三大类:序列(seq).集合(set).映射(map)所有的集合都扩展自Iterable 特质,在Scala中集合有可变和不可变两种类型,可变集合可以在适当的地方被更新或者扩展,这意味着可以修改.添加.移除一个集合的元素,而不可变集合类则永远不会改变,但是仍然可以模拟添加.移除.或者更新操作,但是这些操作下都会返回一个新的集合.immutable 类型的集合 初始化后就不能改变了(注意与 val 修饰的变量进行区别),val

scala简要:高级函数和高级类型

在scala中,函数是头等公民,可以用变量存储函数,可以使用匿名函数,和带参数的函数.如果需要一个序列的值,一般从一个简单序列转化得出.函数可以在变量不再作用域内时被调用,这样的函数叫闭包. 柯里化是指将原来接受两个参数变成接受一个参数的函数的过程.不需要用return语句来返回函数值,函数的返回值就是函数体的值. scala中,用方括号来定义类型参数,从调用该方法的实际参数来推断出类型.视图界定 T<%V要求必须存在一个从T到V的隐式转换,Manifest对象是构造器的隐式参数,可用于上下文界

【转】Scala学习——集合

原文链接 http://nerd-is.in/2013-09/scala-learning-collections/ 所有集合都扩展自Iterable特质 集合有三大类,分别为序列,集和映射 对于几乎所有集合类,Scala都同时提供了可变的和不可变的版本 Scala列表要么是空的,要么拥有一头一尾,其中尾部本身又是一个列表 集是无先后次序的集合 用LinkedHashSet来保留插入顺序,或者用SortedSet来按顺序进行迭代 +将元素添加到无先后顺序的集合中:+: 和 :+ 向前或向后追加到

Scala之集合Collection

概述 Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable collections) 静态与延迟加载集合 (Eager and delayed evaluation ) 串行与并行计算集合(Sequential and parallel evaluation ) 关于第一个维度我想我们不需要再介绍了.关于第二维度,是这样解释的, 首先我们来解释一个概念:transformation,集合中有大量的操作都是把一个集合"转换"成另一个集合

scala 简要之数组与映射

数组 Scala中的Array是定长数组,ArrayBuffer是变长数组,对应于Java中的ArrayList,C++中的Vector,可以用相同的代码处理这两种数据结构,用for (i<-区间 )来遍历,用 for(...) yield 创建一个类型与原始集合相同的新集合,还可以通过if 在进行条件过滤.Scala中的内建函数sum,sorted,max,min,quicksork提供了常用算法. 由于Scala数组是用java数组实现的,可以在java和scala之间传递,只需引入scal

用Scala实现集合中相邻元素间的差值

欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a,b,c,d)中(b-a,c-b,d-c) 解法 val l1 = 1 to 10 toList val l2 = l1.tail l1.zip(l2).map(p=>(p._2 - p._1) 上述代码即可求出两两差值.代码含义稍作解释: tail表示一个集合中除首元素外的剩余元素,也是一个集合.

scala 简要: Actor

actor提供了并发程序中与传统的基于锁的结构不同的另一种选择,通过尽可能避免锁和共享状态,actor更容易地设计出正确.没有死锁或争用状况的程序.Scala提供了actor的简单实现,akka(http://akka.io)提供了高级actor类库. 每个actor都要扩展Actor类并重写Act方法,actor是处理异步消息的对象,消息可以是任何对象,通过!操作符发送消息,例如:actorX !"happy new year"一个好的方式是使用样例类作为消息,这样,actor可以使

scala简要:包

Scala中的包与java包或c++命名空间的目的相同,可以在同一文件中为多个包贡献内容. 尽量使用完整包名,避免使用scala,java,com,org等来命名嵌套的包.串联式包语句可以限定可见的包. 包可以包含类,对象和属性,但不能包含函数和变量的定义,在实现上,包对象被编译成带有静态方法和字段的JvM类.通过修饰符同样可以达到public,private或protected的效果. 在scala中, 任何地方都可以声明引入包,和python很相似.通过选取器可以引入包中的指定成员,还可以对

scala简要: 继承

scala扩展类的方式同样是使用extends关键字,重写一个非抽象方法必须使用override修饰符,用isInstanceOf方法判断某个对象是否属于某个特定的类,只有主构造器可以调用超类的构造器. 字段重写时的限制:-def 只能重写另一个def-val只能重写另一个val或不带参数的def-var只能重写另一个抽象的var 构造顺序问题的根本原因--java允许在超类的构造方法中调用子类的方法.因为在子类中正确的扩展相等性判断非常困难,所以将equals方法定义成final.除非万不得已