Scala--集合基础

Scala 中集合的基本介绍

1)Scala 同时支持 不可变集合可变集合 ,不可变集合可以安全的并发访问
2)两个主要的包:
scala.collection.immutable (不可变集合)
scala.collection.mutable (可变集合)
3)Scala 默认采用不可变集合,对于几乎所有的集合类,Scala 都同时提供了可变(mutable)和不可变(immutable)的版本
4)Scala 的集合有三大类:
序列 Seq
集 Set
映射 Map
所有的集合类都扩展自 Iterable 特质

不可变集合继承层次一览图
在这里插入图片描述
小结:
在这里插入图片描述

可变集合继承层次一览图
在这里插入图片描述

数组

定长数组
第一种方式定义数组:
在这里插入图片描述
Scala :val arr = new Array[Int] (4)
Java :int [] arr = new int[4]

第二种方式定义数组:
在这里插入图片描述
遍历方式
在这里插入图片描述

ArrayBuffer

变长数组(声明泛型)
在这里插入图片描述

Array 和 ArrayBuffer 相互转换

在这里插入图片描述

多维数组

定义:

var arr = Array.ofDim[Double] (m,n)

遍历:
在这里插入图片描述

Scala 数组 与 Java 的 List 的互转

在这里插入图片描述
Java 的 List 转 Scala 的 Buffer

注意:因为我看的视频是17年的,因为Scala 的更新,上面的代码语法可能已经失效,这一部分我也没有尝试。

元组 Tuple

元组也可以理解为一个容器
可以存放各种相同或者不同类型的数据
简单点说:就是将多个无关的数据封装为一个整体,称为元组,最多的特点就是灵活,对数据没有太多约束
注:元组中最大只能放 22 个元素
元组的类型取决于有多少个元素,
在这里插入图片描述

访问元组:
1)顺序号(_顺序号) 从1开始
2)索引 (productElement)从0开始
在这里插入图片描述

元组的遍历
注意,元组的遍历需要用到迭代器

在这里插入图片描述

List

Scala 中的 List 与 Java 中的 List 不一样。Java 中 List 是一个接口,真正存放数据是 ArrayList, Scala 的 List 可以直接存放数据,就是一个 object。
默认情况下 Scala 的 List 是不可变的。
List 属于 序列 Seq。

Nil 空集合
在这里插入图片描述
在这里插入图片描述

List 中元素的追加

向列表中增加元素,会返回新的列表/集合对象。
注意:Scala 中List 元素的追加不同于 Java
1》在列表的最后增加数据

val list2 = list1 :+ 4

2》在列表的最前面增加数据

val list3 =0 +: list1

在这里插入图片描述
3》在列表的最后增加数据
在这里插入图片描述
:: 的使用
在这里插入图片描述

::: 的使用

::: 两边都要为集合
在这里插入图片描述

ListBuffer

listBuffer 是可变的 list 集合

在这里插入图片描述

删除元素
在这里插入图片描述

Queue 队列

说明
1)队列是一个有序列表,在底层可以用数组或是链表来实现
2)其输入和输出要遵循 先入先出 的原则。
即:先存入队列的数据,要先取出。后存入的要后取出
3)在Scala中,由设计者直接给我们提供队列类型使用。
4)在scala中, 有 scala.collection.mutable.Queue 和 scala.collection.immutable.Queue , 一般来说,我们在开发中通常使用可变集合中的队列。

队列创建:

var queue = new mutable.Queue[Int]

添加元素:
在这里插入图片描述
入队列: dequeue()
默认从队列尾入队列

出队列:enqueue(),可以添加多个
默认从队列头出队列

在这里插入图片描述
返回队列元素
queue.head
queue.last
queue.tail
在这里插入图片描述

Map

Java Map 回顾:
HashMap 是一个散列表(数组+链表),它存储的内容是键值对(key-value)映射,Java中的HashMap是无序的,key不能重复

Scala 中 Map 介绍:
1)Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射
Scala中不可变的Map是有序的,可变的Map是无序的。(默认是不可变的)

2)Scala中,有可变Map (scala.collection.mutable.Map) 和 不可变
Map(scala.collection.immutable.Map)

构建Map

构造不可变映射
下面的输出顺序和声明顺序一致
在这里插入图片描述

构造可变映射
需要指定可变Map 的包
下面的输出顺序和声明顺序不一致
在这里插入图片描述
构造空映射
在这里插入图片描述
对偶元组

在这里插入图片描述

Map 取值操作
1)使用 map(key)
如果key存在,则返回对应的值
如果key不存在,则抛出异常[java.util.NoSuchElementException]
在Java中,如果key不存在则返回null
在这里插入图片描述
2)使用contains方法检查是否存在key
返回Boolean
1.如果key存在,则返回true
2.如果key不存在,则返回false
map4.contains(“B”)

在这里插入图片描述
3)使用map.get(key).get取值
通过 映射.get(键) 这样的调用返回一个Option对象,要么是Some,要么是None

在这里插入图片描述

说明和小结:
map.get方法会将数据进行包装
如果 map.get(key) key存在返回some,如果key不存在,则返回None
如果 map.get(key).get key存在,返回key对应的值,否则,抛出异常 java.util.NoSuchElementException: None.get

4)-使用map4.getOrElse()取值

getOrElse 方法 : def getOrElse[V1 >: V] (key: K, default: => V1)
说明:
如果key存在,返回key对应的值。
如果key不存在,返回默认值。在java中底层有很多类似的操作。
在这里插入图片描述
⭐⭐⭐⭐⭐
如何选择取值方式建议
如果我们确定map有这个key ,则应当使用map(key), 速度快
如果我们不能确定map是否有key ,而且有不同的业务逻辑,使用map.contains() 先判断在加入逻辑
如果只是简单的希望得到一个值,使用map4.getOrElse(“ip”,“127.0.0.1”)

Map的修改
前提:Map 是可变的
在这里插入图片描述

Map添加元素
在这里插入图片描述
添加的元素存在时,就是更新

Map 删除元素
在这里插入图片描述

注意:
定义Map 的时候要注意 类型是 var 还是 val
当是 var 类型时:
在这里插入图片描述
当时 val 类型时:
在这里插入图片描述
Map 的遍历
在这里插入图片描述

Set

集是不重复元素的结合。集不保留顺序,默认是以哈希集实现

Java 回顾:
Java中,HashSet是实现Set接口的一个实体类,数据是以哈希表的形式存放的,里面的不能包含重复数据。Set接口是一种不包含重复元素的 collection,HashSet中的数据也是没有顺序的。

Scala 中:
默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包

创建:

	val set1 = Set(1,2,3)//不可变
    println(set1)
    val set2 = mutable.Set(1,2,3)//可变
    println(set2)

添加:
在这里插入图片描述

删除
在这里插入图片描述

遍历:
在这里插入图片描述

Set 更多操作
在这里插入图片描述

-----韩顺平老师Scala笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值