第十章 Scala 容器(一):整体介绍

1. 整体架构

    Scala容器类是非常丰富的,整体架构也比较复杂,下面我们来根据图(10-2)来认识一下。Scala的容器类都是从Traversable和Iterable这两个trait开始的,然后分为三大类,分别是Seq,Set和Map,然后Seq又分为IndexedSeq和LinearSeq两种。其中IndexedSeq可以理解为数组形式,类似于Java中的ArrayList,而LinearSeq是以链表的形式存储的,类似于Java中的LinkedList。然后我们回来再看一下顶端的两个trait,其中Traversable允许你通过for each来重复遍历容器中的内容,而Iterable允许你使用Iterable遍历整个容器,区别是实用iterable遍历容器时,对于容器内的每个元素只能遍历到一次,这一点鹤Java的Iterable保持一致。

164355_HvSf_2633112.png

2. Seq

    我们来看一下Seq的架构图,刚才已经提到Seq分类IndexedSeq和LinearSeq两大类。

165358_Kvpo_2633112.png

    其中IndexSeq允许你通过索引(下标)来随机访问,比如你想获取容器内下标为5000的值,你可以直接使用IndexedSeq(5000)来实现,IndexdSeq的默认实现为Vector。

scala> val x = IndexedSeq(1,2,3)
x: IndexedSeq[Int] = Vector(1, 2, 3)

scala> x(1)
res22: Int = 2

    而LinearSeq被高效的划分为头和尾部,其中头是容器内的第一个元素,而尾部为除了头元素之外剩余的所有元素。我们可以方便的使用head和tail已经isEmpty方法来访问LinearSeq容器。LinearSeq的默认实现为List。

scala> val seq = collection.immutable.LinearSeq(1,2,3)
seq: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

scala> seq.head
res23: Int = 1

scala> seq.tail
res24: scala.collection.immutable.LinearSeq[Int] = List(2, 3)

scala> seq.isEmpty
res25: Boolean = false
3. Map

    Map作为一个存储键值对的容器(key-value),其中key值必须是唯一的,结构见图(10-4)。

170956_vGCT_2633112.png

    默认情况下,我们可以通过Map直接创建一个不可变的Map容器对象,这时候容器中的内容是不能改变的。如果你想获得一个内容可变的Map,那么必须使用scala.collection.mutable.Map来创建。

scala> val m = Map(1 -> "a", 2 -> "b")
m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)

scala> val m = scala.collection.mutable.Map(1 -> "a", 2 -> "b")
m: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)
4. Sets

    Scala中的Set和Java中的Set一样,存储的内容是不可重复的。

171536_3BWR_2633112.png

    默认情况下,我们可以通过Set直接创建一个不可变的Set容器。和Map一样你可以使用mutable包中的Set来创建一个可变的Set容器。

scala> val set = Set(1,2,3)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val set = collection.mutable.Set(1,2,3)
set: scala.collection.mutable.Set[Int] = Set(1, 2, 3)


转载于:https://my.oschina.net/nenusoul/blog/651537

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值