返回介绍

数学基础

统计学习

深度学习

工具

Scala

集合 collection(一)

发布于 2023-07-17 23:38:22 字数 4054 浏览 0 评论 0 收藏 0

  1. Scala 自带了一个强大的集合类库, 它们具有易用、精简、安全、快速、通用的优点。

    • 易用:一组2050 个方法足以支持大部分集合问题,不需要理解复杂的循环或者递归。

      持久化的集合加上无副作用的操作意味着不需要担心会意外地污染已有的集合。迭代器和集合更新之间的相互影响也没有了。

    • 精简:使用一个方法就可以做到一个或者多个循环才能完成的事情。

    • 安全:Scala 集合的静态类型和函数式本质意味着我们可能会犯的错误大多数都可以在编译期间被发现。

    • 快速:类库对集合操作进行了调整和优化,通常来说集合都非常高效。

      另外,Scala 集合对于多核并行执行也进行了适配,并行集合和串行集合一样支持同样的操作,无需学习任何新的语法。

      可以简单的通过调用 par 方法将一个串行集合转换成一个并行集合。

    • 通用:集合对于任何类型都可以提供相同的操作,只要这个操作对于该类型而言是讲得通的。

      例如,所有的集合都可以用 。emtpy 方法创建空集合。

  2. 所有的集合类都可以在 scala.collection 包,或者它的子包mutable、immutable、generic 中找到。

    Scala 的集合类库区分了可变集合与不可变集合,其中:Array 永远是可变的,List 永远是不可变的,而SetMap 都拥有可变版本和不可变版本。

    • scala.collection.mutable :包含可变集合类
    • scala.collection.immutable :包含不可变集合类。
    • scala.collection.generic :包含了实现集合的构建单元。集合框架的日常使用通常不需要使用这个包,极端情况除外。
    • scala.collection :该包中的集合类型既可以是可变的,也可以是不可变的。一般而言,这个包的根root 集合定义了与不可变集合相同的接口,而 immutable 包中的可变集合会在上述不可变接口基础上添加一些有副作用的修改操作。

    scala 默认使用不可变集合。

  3. 注意:这里的集合表示 collection,而 Set 集是 collection 中具体的一种类型。

  4. 最重要的集合如下:

    
    Traversable
                --> Iterable
                             --> Seq
                                    --> IndexdSeq
                                                 --> Vector
                                                 --> ResizableArray
                                                 --> GenericArray
                                     --> LinearSeq
                                                  --> MutableList
                                                  --> List
                                                  --> Stream
                                     --> Buffer
                                                --> ListBuffer
                                                --> ArrayBuffer
                              --> Set
                                     --> SortedSet
                                                --> TreeSet
                                     --> HashSet(可变的)
                                     --> LinkedHashSet
                                     --> HashSet(不可变的)
                                     --> BitSet
                                     --> EmptySet, Set1, Set2, Set3, Set4
                              --> Map
                                     --> SortedMap
                                                  --> TreeMap
                                     --> HashMap(可变的)
                                     --> LinkedHashMap(可变的)
                                     --> HashMap(不可变的)
                                     --> EmptyMap, Map1, Map2, Map3, Map4

    这些类拥有相当多的共性:

    • 每个集合都可以用一致的语法来创建:先写出类名,再写出元素:

      
      
      xxxxxxxxxx
      Traversable(1,2,3) Iterable("x","y","z")
    • 所有集合的 .toString 方法也会产出对应格式的输出:类名名称加上用圆括号包围起来的元素。

    • 所有集合都支持由Transversable 提供的 API,但是这些方法都返回自己的类而不是根类 Transversable

    • 相等性对于所有集合类而言也是一致的。

  5. 大部分类都有三个版本:根版本、可变版本、不可变版本。唯一例外是 Buffer,它只有可变版本。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文