scala04.数据结构(重点)

scala04.数据结构(重点),第1张

4.1主要的集合特质

Scala同时支持可变集合和不可变集合,

不可变集合从不可变,可以安全的并发访问。

Scala优先采用不可变集合。

集合主要分为三大类:序列、集、映射

所有集合都扩展自Iterable特质。

对于几乎所有的集合类,Scqla都同时提供了可变和不可变的版本。

Seq是一个有先后次序的值得序列。

IndexedSeq能够通过整形下标快速访问元素。

Set是一个没有先后次序的值集合。

在SortedSort中,元素以某种排过序的顺序被访问。

Map是一组键值对偶,SortedMap按照键的排序访问其中的实体。

如果需要一个定长数组,可以使用Scala中的Array,Array 以java数组的方式实现。

变长数组可以使用ArrayBuffer,Java中有ArrayList

转换动作不会修改原数组,而是产生一个新的数组。

和Java一样,多维数组通过数组的数组来实现,可以用ofDim方法。

Scala数组是通过Java进行实现的

使用scala.collection.convert.AsJavaConverters

或者AsScalaConverters进行转换

映射就是key-value的集合,就类似于Java中的Map。

不可变映射也可以调用方法,只不过产生新的映射。

新映射和老映射共享大部分结构。可变映射是在原映射基础上进行修改。

使用JavaConversions进行转换

元组是不同类型的值的聚集

元组使用_1,_2,_3来访问

元组是从1开始不是0;

元组可用于函数需要返回不止一个值得情况

队列是一个先进先出的结构:

Stack是一个先进后出的结构

如果List为空,用Nil来表示。

集是不重复元素的结合。集不保留顺序,默认是以哈希集实现。

1.向后(:+)或向前(+:)追加元素到序列当中。

2.添加(+)元素到无先后次序的集合中。

3.用-移除元素。

4.用++和--来批量添加和移除元素。

5.对于列表,优先使用::和.

6.改值 *** 作有+=、++=、-=和--=。

7.对于集合,我更喜欢++、--和--=。

8.我尽量不用++:、+:和++-:。

map应用于集合中的每一个元素,并产生转换后的一个新元素。

flatmap同样应用于集合的每一个元素,对于每一个元素产出一个集合,并将集合中的元素串接在一起。

将二元函数应用于集合中的元素

作用于两个集合,将对应的元素合并成一个元组。

通过iterator方法从集合获得一个迭代器

流Stream只有在需要的时候才会去计算下一个元素

:: 返回一个流

view不会缓存数据,每次都要重新计算

Scala类库提供了6个并发特质,可以通过混入这些集合,让集合的 *** 作变成同步的

Scala为了充分使用多核CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。

并行集合位于scala.collection.parallel,分immutable和mutable。

通过par关键字将集合转换为一个并行集合

通过ser方法将并行集合转换回串行集合。

注意:在并行任务里面,不要同时更新一个共享变量。

1、如果想在变量名、类名等定义中用保留字,可以用反引号:val‘val'=42

2、这种形式叫中置 *** 作符,A *** 作符B等同于A. *** 作符(B)

3、后置 *** 作符,A *** 作符等同于,A. *** 作符,如果 *** 作符定义的时候不带()则调用时不能加()

4、前置 *** 作符,+、一、!、~等 *** 作符A等同于A.unary_ *** 作符

5、赋值 *** 作符,A *** 作符=B等同于A=A *** 作符B

scala中的List不是java的List,他们并没有任何的继承关系,你需要把Scala的List转换成Java的List import scala.collection.convert.wrapAsJava.bufferAsJavaListval s:java.util.List[Int] = bufferAsJavaList(List(1,2,3).toBuffer) 但是根据你


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11620612.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存