学习如何使用Scala集合

113 阅读6分钟

掌握Scala集合的入门方法

集合是包含任意数量元素的事物的容器。可变和不可变的集合都包括在内,而这些集合在功能上又与Val和Var有所不同。

Scala集合还提供了各种灵活的内置方法,可用于直接在数据上执行不同的操作,如转换和操作。

前提条件

  • 运行Scala程序。
  • 了解Scala框架不被.NET框架(Windows操作系统)所支持。

Scala编程语言概述

Scala是一种多范式、通用的编程语言。它是在高层次上设计的。功能性编程也可以在这种纯粹的面向对象的编程语言中完成。

在Scala中,不存在所谓的主要数据类型,所有东西都是一个对象。排版安全和细化是这种编程语言的目标。

Java Virtual Machine (Scala中的JVM)应用程序可以作为字节码(Java Virtual Machine)执行。 ,这就是Scala的首字母缩写。Scalable language

这个包还提供了Javascript运行时。在编程语言方面,Scala受到了Java的很大启发,但它也借鉴了其他家族的语言,如Lisp、Haskell和Pizza。

下面的程序显示了一个Scala代码的例子。

object demo {

def main(args: Array[String])
{

    println("Hi, Welcome to section engineering!")
}
}

上面的代码,给出了以下输出。

Hi, Welcome to section engineering!

为什么使用Scala编程语言

Scala在程序员中的受欢迎程度可能归因于许多因素。

下面是其中的几个。

  • 学习Scala很简单,因为它是一种高级语言,类似于Java、C和C++。因此,任何人都可以快速掌握Scala。如果你熟悉Java,那么Scala的学习就更简单。

  • 有用、可扩展、高产。Scala包含了其他语言最典范的特点,如C和C++编程语言,以及Java编程语言。

  • Scala与Java紧密结合,这要归功于创新的源代码架构,它使Scala编译器能够理解Java类。此外,编译器还可以利用框架、Java库和其他附加工具和资源等。用Scala编写的应用程序在编译后可以在JVM上运行。

  • 基于网络的和桌面的应用开发都可以通过编译JavaScript来支持网络应用。对于桌面应用程序,JVM的字节码也是以同样的方式生成的。

  • 大多数知名机构,如苹果、Twitter、沃尔玛和谷歌,都将他们的大部分代码从其他语言迁移到了Scala。这是因为Scala具有可扩展性,并且会被用于后端流程,是一个不错的选择。

Scala经常被误解为Java的附加产品。然而,这是不真实的。Scala可以完美地与Java一起工作。在JVM(Java虚拟机)上成功编译和执行时,Scala应用程序会生成Java字节代码。

了解Scala集合框架

集合包括Seq, Set,Map ,是最细微的层次。它们都是一个特性的后代,可以在人与人之间传递。

为了简化代码示例中的实现,所有Traversable(父)的子女都是Traits,而不是类。这就省去了在调用对象之前创建对象的麻烦。

让我们仔细看一下,如下。

Scala framework

  • 参考书目。Scala、面向对象和函数式编程完全入门介绍
  • Traversable。这支持对整个集合的遍历,以及对所有集合共同的行为,无论其中包含什么样的信息。它意味着对于每个函数,Traversable允许我们在集合中进行迭代。
  • Iterable:允许你使用一个迭代器逐个循环浏览一个集合的项目。

使用迭代器不可能多次遍历一个集合,因为每个元素在迭代过程中都会被消耗掉。

了解可变和不可变的集合

Scala编程语言只给出了两种类型的集合,即:mutableimmutable collections. Scala的集合中,可改变的集合和不可改变的集合有系统的区别。

一个可改变的集合可以在使用时被改变或扩展。因此,你可以改变、添加或删除文集中的项目。

不可变的集合永远不会改变。将可以做一些看起来像添加、删除和更新的操作,但它们会返回一个新的集合,让之前的集合保持不变。

Scala集合包含了所有的集合类,无论它们是可变的、不可变的,还是通用的。

大多数客户端的集合类都在Scala.collection,scala.collection.immutable, 和scala.collection.mutable 包中找到。

scala.collection 包含了最常用的集合类。各个变体的可变性程度不同。

可变集合--有可能更新这种集合,但它将新的元素附加到现有的元素上。

可变集合的项目可以被添加、更新或删除。可变集合的例子包括。AnyRefMap, ArrayBuffer, ArrayStack, BitSet, ArrayBuilder, ArraySeq, HashSet, LinkedHashMap, LinkedHashSet, LinkedList, DoubleLinkedList, HashMap等等。

下面的代码是一个可变集合的例子。

object mutable {
def main(args: Array[String]) {
val ls = (10 to 14).toList
println("Outcome is: " + ls);
}
}

该代码的结果是

Outcome is: 10 11 12 13 14

从上面的代码可以看出,一个列表被立即创建,当你试图使用它时,列表中的项目被发现。

对可变集合进行追加和重新分配是不可能的,因为可变集合缺乏+= 功能。

不可变的集合--不可能改变这种集合。从集合中添加、更新和删除项目的方法仍然是可见的。

然而,在内部,一个新的组被创建;之前的集合不受影响。

不可变集合的例子包括HashSet, LongMap, Stack, ListMap, NumericRange, StreamIterator, TreeSet, ListSet, List, Vector, TreeMap, Stream等等。

下面的代码是一个不可变集合的例子。

object Immutable {
def main(args: Array[String]) {
val ls = (9 to 12).toList
println(" "+ls);
}
}

输出List(9, 10, 11, 12)

Scala中的字符串和懒惰集合

当我们对集合进行数据转换时,比如过滤、映射、最小/最大、减少、折叠等,我们基本上是在创建一个新的组。

根据可用的资源,这可能是可行的。

当项目被评估时,一个新的集合会立即形成,并且内存会及时分配给那些严格转换的元素。

懒惰集合中的转换不会立即生成另一个集合。当你说 "按需分配内存 "时,你意味着内存不会立即可用。

在一个集合上创建一个视图,将其转换为一个懒惰集合。

下面的代码是一个懒惰集合的例子。

object Demo {
def main(args: Array[String]) {
val ls = (1 to 10).toList
val lsLazy = ls.view
println("View: " + lsLazy);
}
}

输出

View: SeqView(...)

上面的代码在建立现有列表的视图时没有分配内存,因为它只是创建了一个列表的视图。没有进行额外的操作,如foreach、min或max。

为了使代码完成编译过程,我们将在println("View: " + lsLazy) 行中加入.max 。整行代码将是println("View: " + lsLazy.max) ,输出max 10

总结

从上面的信息中,我们已经了解了可伸缩语言的介绍。我们还研究了集合--可变和不可变的集合,以及它们的不同之处。

我希望你觉得这对你有帮助。