博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【scala初学】可变集合和不可变集合
阅读量:6550 次
发布时间:2019-06-24

本文共 2117 字,大约阅读时间需要 7 分钟。

scala的集合系统的区分了可变( mutable  )和不可变(immutable )集合。一个mutable  集合能够更新甚至扩展空间,这意味着你能改变,增加,或者删除一个集合的元素。 一个immutable集合,刚好相反,不能改变。你仍然可以做一些类似的增加,删除,或者更新,但是实际上(书生:跟java的string一样)他返回了一个新的对象,这里面就是指返回了一个新的集合,而老的集合没有改变。

所有的集合类在scala.collection 包中,或者他的子包中,分为mutable,immutable以及generic 。 大部分集合都有三个同名的类(经验翻译,不同见解可以指正),每个同名类有不同的特征.


scala.collection.immutable包中元素不可变,可以保证你在任何时间访问他时元素值都是相同的

scala.collection.mutabl 包中的元素可变,所以你要知道他在何时何地变化了

有一些集合类不在上述两个包下,如 是 和 的父类。一般情况下会在collection包下定义接口,由mutable和immutable两个包实现。


跳过一段废话。

(书生:重点)

scala默认的集合包是不可变的 ,即cala.collection.immutable。 举例:

Set 如果没有导入,默认collection.immutable.Set

如果你想用一个可变的Set,你需要导入collection.mutable.Set,即:

1
import 
collection.mutable.Set

如果想两个都引用,又想简单写,有个办法:

1
import 
scala.collection.mutable

直接用Set则仍是默认不可变的,如果想Set是mutable的,写成mutable.Set

还有一个包  collection.generic。 该package包含了实现集合的构建块。典型的, generic里classes推迟实现一些函数。另一方面,集合framework的用户需要在一些特殊环境中用到generic中的类。

为了便利,以及向后兼容,一些重要的类型有别名,因此你能用它们的简称,而不需要import.如List

1
2
3
4
scala.collection.immutable.List   
// that's where it is defined
scala.List                        
// via the alias in the  scala package
List                              
// because  scala._ 
                                  
// is always automatically imported

其他的类型别名有,, and .


下图展示了最高等级的抽象类 abstract classes 或者接口 traits

collections.png

下图展示 scala.collection.immutable.

collections.immutable.png 

下图展示 scala.collection.mutable.

collections.mutable.png

一些例子,父类和实现类,参考上图:

1
2
3
4
5
6
7
8
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)
1
2
List(
1
2
3
)
HashMap(
"x" 
-> 
24
"y" 
-> 
25
"z" 
-> 
26
)

以上toString方法实现相同,并且写法与如上相同。

 所有集合类都支持Traversable提供的API,但只有一些特殊类有意义。如Traversable 类中的 map 方法返回另一个Traversable ,但结果类型会在子类中被重写。例如,在List中调用map,会返回一个List结果,在Set中调用返回Set.

1
2
3
4
scala> List(
1
2
3
) map (
_ 
1
res
0
: 
List[Int] 
= 
List(
2
3
4
)
scala> Set(
1
2
3
) map (
_ 
2
)
res
0
: 
Set[Int] 
= 
Set(
2
4
6
)

上述集合函数库中的实现方式被成为 uniform return type principle. -- 一致返回类型原则

集合的大部分存在(指名字相同的类分别存在)三个包中:root,mutable,immutable.只有Buffer trait,只存在mutable集合中

本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1427927,如需转载请自行联系原作者
你可能感兴趣的文章
Jquery菜单tab点击效果+切换内容
查看>>
FastDFs 开源的轻量级分布式文件系统部署
查看>>
以接口为主导的设计中, 我在使用的框架模式
查看>>
职业、管理和招聘——近期的一些碎碎念
查看>>
UITableView 基本使用方法总结
查看>>
如何编写高性能sql语句
查看>>
网站访问速度测试
查看>>
微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作...
查看>>
Spring中的AOP(七)——基于XML配置文件方式的AOP
查看>>
xshell无法在vim中复制黏贴
查看>>
SecureCRT 官网有Ubuntu12.04的软件包下载
查看>>
一位IT高管20年的职场心经
查看>>
Linux 逻辑卷LVM创建扩展删除实例
查看>>
MySQL多主多从架构实现及主从复制问题处理
查看>>
Fedora下用rpm安装JDK
查看>>
spring整合hessain 访问远程服务
查看>>
PXE网络安装linux
查看>>
关于在angular2及以上版本引入bootstrap 并有提示功能
查看>>
十三、rsync+inotify的使用
查看>>
挨踢部落故事汇(16):技术人疲倦期的最佳实践
查看>>