您的位置:首页 > 其它

再谈Scala集合

2017-12-14 14:01 218 查看
集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再梳理一下。 本文原文出处: 本文原文链接: http://blog.csdn.net/bluishglc/article/details/78801913 转载请注明出处。

集合“族谱”

还是先上张图吧,这是我找到的最好的一个关于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)


关于
Traversable

Traversable
是整个类体系中的顶层父类,它有一个抽象方法:

def foreach[U](f: Elem => U)


Traversable
还提供了一系列的具体方法,它们分为以下几个类别:

添加:
++
, 把两个traversable加在一起,返回的是一个新的traversable

映射操作:
map
,
flatMap
, and
collect


转换操作:
toArray
,
toList
,
toIterable
,
toSeq
,
toIndexedSeq
,
toStream
,
toSet
,
toMap
,

复制操作:
copyToBuffer
and
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
,
/:
,
:\
,
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
Vector

Scala中的Array是一个可变的,具有索引的集合,但是它有一个特点,即:一但它的大小被设定,它就无法再改变,这看上去是一个标准的数据结构中的静态数组。

虽然Array经常被用于Scala中的各种示例代码,但是自2.10.x之后,真正被推荐使用的是:

Vector
: 不可变的Array


ArrayBuffer
: 可变类的Array
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala 集合 List Array Seq