Scala数据结构1

零、本讲学习目标

1.掌握数组的使用
2.掌握列表的使用
3.掌握映射的使用
4.掌握集合的使用
5.掌握元组的使用

Scala集合(collection)分为可变集合(mutable collection)和不可变集合(immutable
collection)。可变集合可以对其中的元素进行修改、添加、移除;而不可变集合永远不会改变,但是仍然可以模拟添加、移除或更新操作。这些操作都会返回一个新的集合,原集合的内容不发生改变。

一、数组 (Array)

  • Scala中的数组分为定长数组和变长数组,定长数组初始化后不可对数组长度进行修改,而变长数组则可以修改。

二、使用步骤

(一)定长数组

  • Array的API文档:https://www.scala-lang.org/api/2.11.x/index.html#scala.Array

在这里插入图片描述

1、数组定义

(1)定义数组时初始化数据

  • 自动推断数组类型
    在这里插入图片描述

  • 手动指定数据类型
    在这里插入图片描述
    在这里插入图片描述

(2)定义时指定数组长度,后赋值

  • 先定义,后赋值
    在这里插入图片描述

  • 避免数组下标越界错误
    在这里插入图片描述

2、数组遍历

  • 定义数组arr(自动推断类型,静态初始化)
    在这里插入图片描述

  • 可以使用for循环对数组进行遍历,输出数组所有的元素
    (1)传统for循环方式

  • 通过数组下标来遍历数组元素
    在这里插入图片描述

  • 大家可以看到,反向遍历没有输出结果,怎么解决这个问题?
    在这里插入图片描述

  • 通过(arr.length - 1 to 0) by -1实现反向遍历
    在这里插入图片描述

  • 说明:(a to b) by 1 相当于 (a to b)

(2)增强for循环方式

  • 正向遍历数组元素
    在这里插入图片描述

  • 反向遍历数组元素
    在这里插入图片描述

(3)利用foreach算子遍历数组
达式

  • 利用Scala的foreach算子来遍历数组
    在这里插入图片描述

数组求和

  • 采用遍历算子 - 失败
    在这里插入图片描述

  • 采用增强for循环
    在这里插入图片描述

3、常用方法

  • Scala对数组提供了很多常用的方法,使用起来非常方便
  • 定义数组arr
    在这里插入图片描述

(1)求数组中数值总和

  • 调用sum方法
    在这里插入图片描述

(2)求数组中的最大值

  • 调用max方法
    在这里插入图片描述

(3)求数组中的最小值

  • 调用min方法
    在这里插入图片描述

(4)对数组进行升序排序

  • 调用.sorted方法
    在这里插入图片描述

(5)对数组进行降序排序

  • 调用.sorted.reverse方法
    在这里插入图片描述

(二)变长数组

  • ArrayBuffer的API文档:https://www.scala-lang.org/api/2.11.x/index.html#scala.collection.mutable.ArrayBuffer
    在这里插入图片描述

1、数组定义

  • 变长数组使用类scala.collection.mutable.ArrayBuffer进行定义

  • 定义一个变长Int类型数组arr
    在这里插入图片描述

  • 利用+=运算符添加数组元素(注意是追加元素)
    在这里插入图片描述

  • 遍历数组arr,跟遍历定长数组没有不同
    在这里插入图片描述

  • 利用-=运算符删除数组元素
    在这里插入图片描述

  • 数组中有多个值为4的元素,则从前向后删除第一个匹配的元素,本次删除,第一个4被删除了,但是第二4还依然存在。

2、数组合并

  • Scala支持使用++=符号将两个变长数组进行合并

  • 定义两个变长数组arr1和arr2,合并生成变长数组arr3
    在这里插入图片描述

  • 注意:arr1会是合并后的数据,即ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8)

  • 数组arr2和arr1,合并生成变长数组arr4
    在这里插入图片描述

3、插入元素

  • 使用insert()方法可以在数组指定位置插入一个元素

  • 在数组arr的下标为1的位置插入一个元素666
    在这里插入图片描述

  • 注意:一次插入多个元素是要报错的
    在这里插入图片描述

  • 如果插入的位置参数超出数组的长度,报错
    在这里插入图片描述

  • 如果插入的位置参数等于数组长度,那么就相当于在末尾追加新元素
    在这里插入图片描述

产生随机整数构成的变长数组

  • 产生一个变长数组,包含10个100以内的随机整数
    在这里插入图片描述

  • 三种方式来产生10个随机整数构成的变长数组
    在这里插入图片描述

4、移除元素

  • 使用remove()方法可以在数组的固定位置移除指定数量的元素

  • 从数组arr的下标为1的位置开始移除2元素
    在这里插入图片描述

  • 如果移除起始位置+删除数量 > 数组长度,那么就会报错
    在这里插入图片描述

二、列表 (List)

  • Scala中的列表分为可变列表和不可变列表,默认使用的列表为不可变列表。不可变列表也可以增加元素,但实际上生成了一个新列表,原列表不变。列表元素类型可以相同,也可以不一致。

(一)不可变列表

  • List的API文档:https://www.scala-lang.org/api/2.11.x/index.html#scala.collection.immutable.List
    在这里插入图片描述

1、创建不可变列表

  • 创建一个Int类型的列表- list1
    在这里插入图片描述

  • 创建一个混合类型的列表 - list2,元素类型被系统统一为Any
    在这里插入图片描述

2、给列表添加元素

(1)在列表头添加元素

  • 利用.+:在列表头添加新元素

  • 在列表list1的头部追加一个元素0,生成一个新列表 list3,列表list1没有变的
    在这里插入图片描述

  • 利用::在列表头添加新元素
    在这里插入图片描述

(2)在列表尾添加元素

  • 利用.:+在列表尾添加新元素
  • 在列表list1的尾部追加一个元素100,生成一个新列表 list4,列表list1没有变的

3、列表合并操作

  • List也支持合并操作

  • 创建两个列表list1和list2
    在这里插入图片描述

  • list1与list2合并生成列表list3,list1元素在前,list2元素在后
    在这里插入图片描述

  • list1与list2合并生成列表list4,list2元素在前,list1元素在后
    在这里插入图片描述

4、二维列表

  • 列表的列表称为二维列表
  • 定义二维列表students
    在这里插入图片描述
val students: List[List[Any]] = List(
    List(1, "李文丽", 19),
    List(2, "肖玉玲", 18),
    List(3, "郑刚林", 20))

  • 遍历二维列表students
    在这里插入图片描述
for (student <- students) {
    for (field <- student)
        print(field + "\t")
    println()
}

  • 两种方式遍历二维列表

(二)可变列表

  • ListBuffer的API文档:https://www.scala-lang.org/api/2.11.x/index.html#scala.collection.mutable.ListBuffer
    在这里插入图片描述

1、创建可变列表

  • 可变List需要使用scala.collection.mutable.ListBuffer类

  • 创建列表时初始化数据
    在这里插入图片描述

  • 先创建空列表,然后添加数据
    在这里插入图片描述

2、列表合并

  • 将列表list1与列表list2合并,list1在前,list2在后
    在这里插入图片描述

  • 将列表list1与列表list2合并,list2在前,list1在后
    在这里插入图片描述

  • 注意,哪怕执行list1 :++ list2,依然是list1在前,list2在后

list1 :++ list2

3、列表排序

  • 列表升序和降序
list
list.sorted
list.sorted.reverse
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值