开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天 juejin.cn/post/716729…
高级for循环
最后来看一下高级for循环的用法
- if守卫
- if守卫模式,假设我们想要获取1~10之间的所有偶数,使用普通的for循环,需要把每一个数字都循环出来,然后判断是否是偶数
- 如果在for循环里面使用if守卫,可以在循环的时候就执行一定的逻辑,判断数值是否是偶数
这是if守卫模式的用法
- for推导式
- for推导式,一个典型例子是构造集合
- 我们在使用for循环迭代数字的时候,可以使用yield指定一个规则,对迭代出来的数字进行处理,并且创建一个新的集合
这是for的推导式用法
Scala的集合体系
集合的顶层接口是Iterable,Iterable接口下面还有一些子接口,Set、Seq、Map
这几个子接口下面有具体的实现类
-
set下面有HashSet、LinkedHashSet、SortedSet等等
-
seq下面有List、Buffer、Range等等
-
Map下面有HashMap、SortedMap、LinkedHashMap等等
-
其中Buffer下面还有两个常用的,ArrayBuffer、ListBuffer
这是集合中一些常见的实现类
在讲这个集合体系的时候,还会关联讲到Array和Tuple这两个数据结构
集合
Scala中的集合是分成可变和不可变两类集合的
-
其中可变集合就是说,集合的元素可以动态修改
-
而不可变集合就是说,集合的元素在初始化之后,就无法修改了
可变集合:在scala.collection.mutable这个包下面
不可变集合:在scala.collection.immutable这个包下面
我们在创建集合的时候,如果不指定具体的包名,默认会使用不可变集合
Set
先来看一下Set,Set代表一个没有重复元素的集合
这个集合的特性和Java中Set集合的特性基本一样
Set集合分为可变的和不可变的集合,默认情况下使用的是不可变集合
Set可以直接使用,并且不需要使用new关键字
看一下Scala的文档,你会发现这个Set不仅仅是一个接口,它还是一个Object
注意:默认情况下直接创建的set集合是一个不可变集合,在这可以看到是在immutable包里面的,不可变集合中的元素一经初始化,就不能改变了,所以初始化后再向里面添加元素就报错了。
Set常用子类有:HashSet、LinkedHashSet、SortedSet
- HashSet:这个集合的特点是:集合中的元素不重复、无序
- LinkedHashSet:这个集合的特点是:集合中的元素不重复、有序,它会用一个链表维护插入顺序,可以保证集合中元素是有序的
- SortedSet:这个集合的特点是:集合中的元素不重复、有序,它会自动根据元素来进行排序
HashSet集合分为可变和不可变之分,immutable包下面的是不可变的,后期无法新增元素
在这里可以使用new关键字,也可以不使用,因为HashSet既是class,又是object,但是包名需要指定,否则无法识别
如果在创建集合的时候就初始化了元素,则可以省略泛型的定义,集合会自动识别元素的类型
-
再来看一下LinkedHashSet
-
LinkedHashSet只有可变的,没有不可变的
-
最后来看一下SortedSet
SortedSet分为可变集合和不可变集合