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

119 阅读2分钟

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

List

接下来看一下List,List属于Seq接口的子接口

List代表一个不可变的列表

注意:为什么有的地方需要写类的全路径,而有的不需要呢?

由于immutable包是默认导入的,所以不需要导包,但是也会有个别虽然在immutable包下面的,但是不写全路径还是报错,原谅它把,反正你都带全路径肯定是没有问题的,后期我们会使用idea来开发,也不需要考虑包名的问题,不过在这为了演示起来更加清晰,就使用scala的命令行了。

针对List有head、tail以及::这几个操作

先演示一下head、tail操作

那其实head和tail就可以获取list中的所有元素了

通过::操作符,可以将head和tail的结果合并成一个List

:: 这种操作符要清楚,在spark源码中是有体现的,一定要能够看懂

针对List中的元素进行迭代和前面讲的Set集合的迭代是一样的

在这里List是不可变的列表,在实际工作中使用的时候会很不方便,因为我们很多场景下都是需要向列表中动态添加元素,这个时候该怎么办呢?

Scala还提供的有一个ListBuffer

ListBuffer:可以支持动态增加或者移除元素

ListBuffer也可以for循环迭代

Map

Map是一种可迭代的键值对(key/value)结构

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

创建一个不可变的Map

创建一个可变的Map

  1. 查询操作

  2. 获取指定key对应的value,如果key不存在,会报错

所以在实际工作中这样直接获取不太好,如果遇到了不存在的key程序会报错,导致程序异常退出。

那是不是可以考虑在获取key的值之前,先判断key是否存在

可以使用contains函数检查key是否存在、

使用if-else语句,如果指定的key不存在,则返回一个默认值

map中还有一个getOrElse函数

最后看一下Map的几个子类

HashMap、SortedMap和LinkedHashMap

  1. HashMap:是一个按照key的hash值进行排列存储的map

  2. SortedMap:可以自动对Map中的key进行排序【有序的map】

  3. LinkedHashMap:可以记住插入的key-value的顺序

HashMap分为可变和不可变的,没有什么特殊之处

在这主要演示一下SortedMap和LinkedHashMap

SortedMap是不可变的

  1. 1
  2. 2
  3. 3
  4. 4