数据学习从0到1 Scala基础语法(二)

100 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天 juejin.cn/post/716729…

高级for循环

最后来看一下高级for循环的用法

  1. if守卫
  2. if守卫模式,假设我们想要获取1~10之间的所有偶数,使用普通的for循环,需要把每一个数字都循环出来,然后判断是否是偶数
  3. 如果在for循环里面使用if守卫,可以在循环的时候就执行一定的逻辑,判断数值是否是偶数

这是if守卫模式的用法

  1. for推导式
  2. for推导式,一个典型例子是构造集合
  3. 我们在使用for循环迭代数字的时候,可以使用yield指定一个规则,对迭代出来的数字进行处理,并且创建一个新的集合

这是for的推导式用法

Scala的集合体系

集合的顶层接口是Iterable,Iterable接口下面还有一些子接口,Set、Seq、Map

这几个子接口下面有具体的实现类

  1. set下面有HashSet、LinkedHashSet、SortedSet等等

  2. seq下面有List、Buffer、Range等等

  3. Map下面有HashMap、SortedMap、LinkedHashMap等等

  4. 其中Buffer下面还有两个常用的,ArrayBuffer、ListBuffer

这是集合中一些常见的实现类

在讲这个集合体系的时候,还会关联讲到Array和Tuple这两个数据结构

集合

Scala中的集合是分成可变和不可变两类集合的

  1. 其中可变集合就是说,集合的元素可以动态修改

  2. 而不可变集合就是说,集合的元素在初始化之后,就无法修改了

可变集合:在scala.collection.mutable这个包下面

不可变集合:在scala.collection.immutable这个包下面

我们在创建集合的时候,如果不指定具体的包名,默认会使用不可变集合

Set

先来看一下Set,Set代表一个没有重复元素的集合

这个集合的特性和Java中Set集合的特性基本一样

Set集合分为可变的和不可变的集合,默认情况下使用的是不可变集合

Set可以直接使用,并且不需要使用new关键字

看一下Scala的文档,你会发现这个Set不仅仅是一个接口,它还是一个Object

注意:默认情况下直接创建的set集合是一个不可变集合,在这可以看到是在immutable包里面的,不可变集合中的元素一经初始化,就不能改变了,所以初始化后再向里面添加元素就报错了。

Set常用子类有:HashSet、LinkedHashSet、SortedSet

  1. HashSet:这个集合的特点是:集合中的元素不重复、无序
  2. LinkedHashSet:这个集合的特点是:集合中的元素不重复、有序,它会用一个链表维护插入顺序,可以保证集合中元素是有序的
  3. SortedSet:这个集合的特点是:集合中的元素不重复、有序,它会自动根据元素来进行排序

HashSet集合分为可变和不可变之分,immutable包下面的是不可变的,后期无法新增元素

在这里可以使用new关键字,也可以不使用,因为HashSet既是class,又是object,但是包名需要指定,否则无法识别

如果在创建集合的时候就初始化了元素,则可以省略泛型的定义,集合会自动识别元素的类型

  1. 再来看一下LinkedHashSet

  2. LinkedHashSet只有可变的,没有不可变的

  3. 最后来看一下SortedSet

SortedSet分为可变集合和不可变集合