Scala—Collections集合概述

Scala

在这里插入图片描述

Scala-集合概述

  • Scala
  • Scala集合概述
    • 1 不可变集合(Immutable Collections)
    • 2 可变集合(Mutable Collections)
    • 3 Scala 集合类的层次结构


Scala集合概述

在 Scala 中,集合主要分为两大类:可变集合(Mutable Collections)和不可变集合(Immutable Collections)。
在这里插入图片描述


1 不可变集合(Immutable Collections)

不可变集合是指该集合对象不可修改,每次修改操作都会返回一个新对象,而不会对原对象进行修改。类似于 Java 中的 String 对象。

在这里插入图片描述

  • 不可变集合是 Scala 中的默认集合类型,位于 scala.collection.immutable 包中

  • 不可变集合在创建后不能被修改。任何修改操作都会返回一个新的集合,而原来的集合保持不变。

  • 常用不可变集合ListVectorSetMap,一旦创建不能修改,所有修改操作返回新集合,适合多线程环境和函数式编程。


2 可变集合(Mutable Collections)

可变集合是指可以直接对原对象进行修改,而不会返回新的对象。类似于 Java 中的 StringBuilder 对象。
在这里插入图片描述

  • 可变集合可以在原地更新或扩展,可以添加、更改或移除集合中的元素。

  • 集合提供了可以直接修改集合的操作。所有的可变集合类都位于 scala.collection.mutable 包中。

  • 常用可变集合ArrayBufferListBufferHashSetHashMap,可以在创建后进行修改,适合需要频繁修改的场景。


3 Scala 集合类的层次结构

Scala 为几乎所有的集合类提供了可变和不可变的版本。

immutable:

不可变集合:scala.collection.immutable
在这里插入图片描述

mutable:

可变集合:scala.collection.mutable
在这里插入图片描述


Iterable 特质是 Scala 集合类层次结构的顶层特质,定义了许多集合操作的基础行为。

在这里插入图片描述

  • 作用:返回一个迭代器对象,可以用来逐个访问集合中的元素。
  • 特点:这是一个抽象方法,具体的集合类需要实现这个方法。

Scala 所有的集合类都扩展自 Iterable 特质。Iterable 特质定义了 iterator 方法,所有其他方法都是基于这个方法实现的。

方法名方法签名描述
foreachdef foreach[U](f: A => U): Unit对集合中的每个元素应用一个函数 f
mapdef map[B](f: A => B): Iterable[B]对集合中的每个元素应用一个函数 f,并返回一个新的集合。
flatMapdef flatMap[B](f: A => Iterable[B]): Iterable[B]对集合中的每个元素应用一个函数 f,并将结果展平为一个单一的集合。
filterdef filter(p: A => Boolean): Iterable[A]筛选出满足条件 p 的元素,并返回一个新的集合。
existsdef exists(p: A => Boolean): Boolean检查集合中是否存在满足条件 p 的元素。
foralldef forall(p: A => Boolean): Boolean检查集合中的所有元素是否都满足条件 p
sizedef size: Int返回集合中元素的数量。
isEmptydef isEmpty: Boolean检查集合是否为空。
nonEmptydef nonEmpty: Boolean检查集合是否非空。
headdef head: A返回集合的第一个元素。如果集合为空,抛出 NoSuchElementException
lastdef last: A返回集合的最后一个元素。如果集合为空,抛出 NoSuchElementException
taildef tail: Iterable[A]返回去掉第一个元素后的集合。如果集合为空,抛出 UnsupportedOperationException
initdef init: Iterable[A]返回去掉最后一个元素后的集合。如果集合为空,抛出 UnsupportedOperationException
takedef take(n: Int): Iterable[A]返回集合的前 n 个元素。
dropdef drop(n: Int): Iterable[A]返回去掉前 n 个元素后的集合。
takeWhiledef takeWhile(p: A => Boolean): Iterable[A]返回集合中满足条件 p 的最长前缀。
dropWhiledef dropWhile(p: A => Boolean): Iterable[A]返回去掉满足条件 p 的最长前缀后的集合。
foldLeftdef foldLeft[B](z: B)(op: (B, A) => B): B从左到右将集合中的元素聚合为一个值。
foldRightdef foldRight[B](z: B)(op: (A, B) => B): B从右到左将集合中的元素聚合为一个值。
reduceLeftdef reduceLeft[B >: A](op: (B, A) => B): B从左到右将集合中的元素聚合为一个值,初始值为集合的第一个元素。
reduceRightdef reduceRight[B >: A](op: (A, B) => B): B从右到左将集合中的元素聚合为一个值,初始值为集合的最后一个元素。
mindef min(implicit ord: Ordering[A]): A返回集合中的最小元素。
maxdef max(implicit ord: Ordering[A]): A返回集合中的最大元素。
sumdef sum(implicit num: Numeric[A]): A返回集合中所有元素的和。
productdef product(implicit num: Numeric[A]): A返回集合中所有元素的乘积。
toListdef toList: List[A]将集合转换为 List
toSeqdef toSeq: Seq[A]将集合转换为 Seq
toArraydef toArray: Array[A]将集合转换为 Array
toSetdef toSet: Set[A]将集合转换为 Set
toMapdef toMap[K, V](implicit ev: A <:< (K, V)): Map[K, V]将集合转换为 Map,要求集合中的元素是键值对。

由于篇幅问题,大家先对Scala中的集合有一个系统的概念,后续各个集合的具体使用会持续更新。

整理不易,列位多多支持谢谢啦🤣🤣🤣

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478435.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLC与反激电路设计【学习笔记】

LLC电路&#xff1a; LLC电路是由2个电感和1个电容构成的谐振电路&#xff0c;故称之为LLC&#xff1a; LLC电路通过谐振能够实现MOS管的软开(soft switching)&#xff0c;减少开关损耗。另外MOS管的通态损耗也很低&#xff0c;换言之产生的焦耳热也少&#xff0c;这样就可以不…

java基础概念36:正则表达式1

一、正则表达式的作用 作用一&#xff1a;校验字符串是否满足规则&#xff1b;作用二&#xff1a;在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例&#xff1a; public static void main(String[] args) {System.out.println("a".matc…

误删了照片,甚至对存储卡进行了格式化 都可以找到丢失的图片,并让您恢复它们 支持一键恢复或永久删除丢失的照片、视频、音乐、文档等-供大家学习研究参考

误删了照片&#xff0c;甚至对存储卡进行了格式化 都可以找到丢失的图片&#xff0c;并让您恢复它们 支持一键恢复或永久删除丢失的照片、视频、音乐、文档等。 建议及早恢复&#xff0c;覆盖就不能找回了~ 下载&#xff1a; https://download.csdn.net/download/weixin_43097…

candence: 常用的一些命令: Move / Mirror / Rotate / Spain / Fix / unFix / Flipdesign

常用的一些命令 一、 Move 移动 一个可移动一个&#xff0c;也可多个 移动器件 二、 Mirror 镜像 Mirror 就是top 和 bottom 层的器件进行相互转换 三、 Rotate 旋转 移动过程中旋转 四、旋转 Spain 不能在移动中旋转 可以一次旋转一个&#xff0c;也可多个 一次旋转…

(三)手势识别——动作识别应用【代码+数据集+python环境(免安装)+GUI系统】

&#xff08;三&#xff09;手势识别——动作识别应用【代码数据集python环境&#xff08;免安装&#xff09;GUI系统】 &#xff08;三&#xff09;手势识别——动作识别【代码数据集python环境GUI系统】 背景意义 随着互联网的普及和机器学习技术的进一步发展&#xff0c;手…

滑动窗口篇——如行云流水般的高效解法与智能之道(2)

前言&#xff1a; 上篇我们介绍了滑动窗口的含义并结合基础题型加以练习&#xff0c;本篇将以进阶难度的题目为索引&#xff0c;深化对于滑动窗口的运用与理解。 一. 将x减到0的最小操作数 题目链接&#xff1a;1658. 将 x 减到 0 的最小操作数 - 力扣&#xff08;LeetCode&am…

微信小程序加载商品首页数据时,页码没有更新,老是page=1。

微信小程序加载商品首页数据时&#xff0c;页码没有更新&#xff0c;老是page1。 源代码 const { baseUrl } require(../../config/config); const config require(../../config/config) import { calcViewHeight, iPhone } from ~/utils/device const { getToken } requi…

优化Docker镜像:提升部署效率与降低资源消耗

目录 1. 最小化镜像层 2. 使用轻量级基础镜像 3. 多阶段构建 4. 清理不必要的文件和依赖 5. 使用.dockerignore文件 6. 压缩和优化文件系统 7. 外部化配置和数据 8. 限制容器资源 9. 定期清理未使用的镜像和容器 结论 在云计算和微服务架构的浪潮中&#xff0c;Docke…

自研芯片逾十年,亚马逊云科技Graviton系列芯片全面成熟

在云厂商自研芯片的浪潮中&#xff0c;亚马逊云科技无疑是最早践行这一趋势的先驱。自其迈出自研芯片的第一步起&#xff0c;便如同一颗石子投入平静的湖面&#xff0c;激起了层层涟漪&#xff0c;引领着云服务和云上算力向着更高性能、更低成本的方向演进。 早在2012年&#x…

ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具

项目地址&#xff1a;ApiChain 项目主页 ApiChain 简介 ApiChain 是一款类似 PostMan 的接口网络请求与文档生成软件&#xff0c;与 PostMan 不同的是&#xff0c;它基于 项目和迭代两个视角管理我们的接口文档&#xff0c;前端和测试更关注版本迭代中发生变更的接口编写代码…

游戏引擎学习第22天

移除 DllMain() 并成功重新编译 以下是对内容的详细复述与总结&#xff1a; 问题和解决方案&#xff1a; 在编译过程中遇到了一些问题&#xff0c;特别是如何告知编译器不要退出程序&#xff0c;而是继续处理。问题的根源在于编译过程中传递给链接器的参数设置不正确。原本尝试…

“软件定义汽车”时代 | 产线海量数据刷写解决方案

一 背景 从起初汽车概念问世时期的“机械定义汽车”&#xff0c;到电力出现后的“电器定义汽车”&#xff0c;再到电子科技迅猛发展后的“电子定义汽车”&#xff0c;再到如今的“软件定义汽车”&#xff0c;可以看出&#xff0c;软件在车辆中扮演着越来越重要的角色。与此同时…

基于预测反馈的情感分析情境学习

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月25日20点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

自制Windows系统(十)

上图 &#xff08;真的不是Windows破解版&#xff09; 开源地址&#xff1a;仿Windows

CTF-RE 从0到 N: 高版本 APK 调试 + APK逻辑修改再打包 + os层调试[2024 强网杯青少年专项赛 Flip_over] writeup

非常好的题,很适合新手入门!!! how tu use JEB 通过百度网盘分享的文件&#xff1a;app-debug.apk 链接&#xff1a;https://pan.baidu.com/s/11oPBq7LTnzasuefGeU6mXA?pwd1111 提取码&#xff1a;1111 --来自百度网盘超级会员V2的分享step1 反编译查看Manifest android:…

Taro React小程序开发框架 总结

目录 一、安装 二、目录结构 三、创建一个自定义页面 四、路由 1、API 2、传参 3、获取路由参数 4、设置TabBar 五、组件 六、API Taro非常好用的小程序框架&#xff0c;React开发者无缝衔接上。 一、安装 官方文档&#xff1a;Taro 文档 注意&#xff0c;项目创建…

qt添加模块

以QtNetwork模块为例 方式一 扩展-qt vs tools-qt project settings 方式二 右键选中项目-属性-qt project settings 方法三 在此界面选择select modules,即可进行相应模块添加

传统经验光照模型

1.什么是光照模型 光照模型(illumination model)&#xff0c;也称为明暗模型&#xff0c;用于计算物体某点处的光强(颜色值)&#xff0c;从算法理论基础而言&#xff0c;光照模型分为两类&#xff0c;一种是基于物理理论的&#xff0c;另一种是基于经验模型的。 基于物理理论的…

金融市场和预期

1.债券的分类 短期债券&#xff08;Short-term Bonds&#xff09;&#xff1a; 通常指到期期限在1年以内的债券。 中期债券&#xff08;Medium-term Bonds&#xff09;&#xff1a; 到期期限在1年到10年之间的债券。 长期债券&#xff08;Long-term Bonds&#xff09;&#xff…

C++:用红黑树封装map与set-2

文章目录 前言一、红黑树封装map与set中const迭代器1. 框架的搭建2. set实现const迭代器3. map实现const迭代器 二、operator[ ]1. operator[ ]要达成的样子2. insert的改变 三. 解决insert里set中的问题四. 解决map中的operator[ ]总结用红黑树封装map与set代码 前言 前面我们…