掌握Scala数据结构(1)ARRAY、LIST

news2024/11/25 14:56:08

一、数组 (Array)

(一)定长数组

1、数组定义

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

  • 数组的静态初始化
  • 自动推断数组类型

在这里插入图片描述

  • 手动指定数据类型

在这里插入图片描述
在这里插入图片描述

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

  • 先定义,后赋值,这叫数组的动态初始化
    在这里插入图片描述
  • 避免数组下标越界错误(数据溢出:Data Overflow)
    在这里插入图片描述

2、数组遍历

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

(1)传统for循环方式

  • 通过数组下标来遍历数组元素

在这里插入图片描述

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

(2)增强for循环方式

在这里插入图片描述
在这里插入图片描述

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

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

3、常用方法

  • Scala对数组提供了很多常用的方法,使用起来非常方便
  • 定义数组arr(通过数组类的构造方法来初始化数组,静态初始化)
    在这里插入图片描述
  • 对数组arr也可以采用先定义后赋值的方式(动态初始化)
    在这里插入图片描述

(1)求数组中数值总和

在这里插入图片描述
在这里插入图片描述

(2)求数组中的最大值

  • 调用max方法,也可以自己编写代码求最大值
    在这里插入图片描述

(3)求数组中的最小值

  • 调用min方法,也可以自己编写代码求最小值
    在这里插入图片描述

(4)对数组实现升序

在这里插入图片描述

(5)对数组实现降序

  • 先调用sorted方法升序,再调用reverse方法反序,就可以实现数组降序
    在这里插入图片描述

(二)变长数组

1、数组定义

  • 变长数组使用类scala.collection.mutable.ArrayBuffer进行定义
  • 定义一个变长Int类型数组arr,利用+=运算符、append方法添加一个数组元素(注意是追加元素),还可以利用appendAll方法添加一个数组(多个元素)

2、遍历数组

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

3、移除元素

  • 利用remove方法可以按下标删除数组元素,当然可能出现下标越界异常
    在这里插入图片描述
  • 利用-=运算符按值直接删除数组元素
    在这里插入图片描述
  • 数组中有多个值为2的元素,则从前向后删除第一个匹配的元素,本次删除,第一个2被删除了,但是第二2还依然存在。
  • 下面继续删除2(删除完2之后,继续删除,不会报错,正所谓以不变应万变)
    在这里插入图片描述
  • 使用remove()方法还可以在数组的固定位置移除指定数量的元素
  • 从数组arr的下标为2的位置开始移除3个元素
    在这里插入图片描述
  • 如果移除起始位置 + 删除数量 > 数组长度,那么就会报错
    在这里插入图片描述

4、数组合并

  • Scala支持使用++=符号将两个变长数组进行合并,其实还可以用appendAll方法来拼接两个数组
  • 定义三个变长数组arr1、arr2与arr3,arr1采用++=合并arr2得到result,其实result与合并后的arr1是相等的,然后arr1再利用appendAll方法合并arr3,结果是三个数组的9个元素全部合并进数组arr1里
    在这里插入图片描述

5、插入元素


在这里插入图片描述
在这里插入图片描述

二、列表 (List)

(一)不可变列表

1、创建不可变列表

  • 创建列表有静态初始化和动态初始化两种方式
  • 创建一个Int类型的列表- list1
    在这里插入图片描述
  • 创建一个混合类型的列表 - list2,元素类型被系统统一为Any
    在这里插入图片描述
  • 创建一个空列表,后面再添加元素
    在这里插入图片描述
  • 利用::在列表头添加新元素
    在这里插入图片描述

2、给列表添加元素

(1)在列表头添加元素

  • 利用.+:在列表头添加新元素(冒号:靠近谁,谁就在前面)
  • 在列表list1的头部追加一个元素0,生成一个新列表 list3,列表list1没有变的

在这里插入图片描述

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

(2)在列表尾添加元素

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

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

  • 既然0 :: list1是在list1前面添加新元素,我们自然会猜想list1 ::
    100是在list1后面添加新元素,验证一下我们的猜想。
    在这里插入图片描述

  • 列表后的::运算符要连接一个列表
    在这里插入图片描述

3、列表合并操作

  • List也支持合并操作
  • 创建两个列表list1和list2
    在这里插入图片描述
  • list1与list2合并生成列表list3,list1元素在前,list2元素在后
    在这里插入图片描述
  • 用方法调用来实现list1与list2合并生成列表list4
    在这里插入图片描述
  • 结论:冒号:靠近哪个列表,那个列表就位于合并列表之前

4、二维列表

  • 列表的列表称为二维列表,其实就是嵌套的列表
  • 可以利用二维列表来对应MySQL数据表的多条记录
  • 定义二维列表students, 让scala自动推断students常量的类型
    在这里插入图片描述
val students = List(
    List(1, "李文丽", 19),
    List(2, "肖玉玲", 18),
    List(3, "郑刚林", 20))

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

(二)可变列表

1、创建可变列表

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

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

  • 先创建空列表,然后利用+=运算符添加数据(动态初始化)
    在这里插入图片描述

2、列表合并

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

3、列表排序

  • 列表升序和降序(降序 = 升序 + 反序)
    在这里插入图片描述

4、列表总和、平均值、最值

  • 计算总和、最值可以直接调用列表方法完成,平均值得自己计算
    在这里插入图片描述

5、添加新元素

  • 添加新元素有两种方法:在末尾添加新元素用append方法;在中间插入新元素用insert方法

  • 调用可变列表的insert(pos, value),在pos位置插入新元素value
    在这里插入图片描述

  • 特殊情况,在列表头插入新元素,pos = 0
    在这里插入图片描述

  • 特殊情况,在列表尾追加新元素,pos = list.length,此时相当于执行append方法的效果
    在这里插入图片描述

6、移除列表元素

  • 调用可变列表的remove(pos, count)方法,从pos位置开始移除count个列表元素
  • 任务:移除list列表中的第6、7、8个元素
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不入耳蓝牙耳机音质好吗?音质表现好的不入耳蓝牙耳机推荐

​不入耳蓝牙耳机因其不入耳佩戴设计&#xff0c;受到很多人的喜欢&#xff0c;也更多人开始使用不入耳式蓝牙耳机了。为了让大家能更快选购不入耳蓝牙耳机&#xff0c;今天就让我来给大家介绍几款性能不错的不入耳蓝牙耳机&#xff0c;一起看看有哪些吧。 一、南卡OE不入耳蓝…

电流检测电路选高侧还是低侧

两种电流检测电路 在电路设计中&#xff0c;使用最广泛的电流采样方法是在电流回路中串联高精度的电阻&#xff0c;通过测量电阻两端的电压计算回路的电流值大小。具体检测方法有如下两种&#xff1a; 高侧电流检测 图1 高侧电流检测 如图1&#xff0c;高侧电流检测&#xff…

Selenium各种浏览器的驱动下载

Selenium各种浏览器的驱动下载 谷歌浏览器&#xff1a;​​​​​​Chrome驱动版本点击下载&#xff08;如果打不开&#xff0c;可以点击淘宝源进行下载) 微软Edge浏览器&#xff1a;Microsoft Edge驱动版本点击下载 火狐浏览器&#xff1a;Firefox驱动版本点击下载 Chrome…

科技点亮课堂,智能黑板解决方案

教育信息化自诞生以来&#xff0c;一直都在不断地向上发展&#xff0c;随着教育信息化2.0、教育现代化2035等战略的推进&#xff0c;教育信息化的步伐逐渐加快&#xff0c;越来越多的学校开始采用智慧型教学终端部署&#xff0c;以更好地促进高效、公平、个性化的教学发展。智能…

索尼mxf播放花帧无声音的修复方法

索尼的影视级摄像机一般是用MXF文件结构&#xff0c;在一些极端情况下(如断电)会生成RSV文件&#xff0c;此时RSV文件无文件结构&#xff08;无文件头、元文件、文件尾等&#xff09;仅仅为数据EC内容&#xff0c;今天我们来说一个特殊的案例&#xff0c;封装只做了文件头结果出…

prometheus监控应用数据(二)

prometheus监控应用数据(二) 本文承接上篇文章prometheus监控应用数据(一)。使用开源软件prometheus对上篇文章中提及到的数据进行可视化监控。 本文使用docker进行prometheus的部署&#xff0c;准备以下两个文件&#xff0c;以及文件内内容如下所示: .env文件 # Container Ti…

【头歌-Python】9.1 X射线衍射曲线绘制(project)第1~2关

第1关&#xff1a;X 射线衍射曲线 任务描述 本关任务&#xff1a;读文件中的数据绘制线图形。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.python 读取文件 2.使用 matplotlib 绘制图形 python 读取文件 python读取文件可以用以下函数实现&#xff1…

华为OD机试真题 JavaScript 实现【记负均正】【牛客练习题】

一、题目描述 首先输入要输入的整数个数n&#xff0c;然后输入n个整数。输出为n个整数中负数的个数&#xff0c;和所有正整数的平均值&#xff0c;结果保留一位小数。 0即不是正整数&#xff0c;也不是负数&#xff0c;不计入计算。如果没有正数&#xff0c;则平均值为0。 数…

计算机网络3(网络层)

目录 1.网络层的作用 2.网际协议的四个协议 3.IP地址 4.IP地址的组成 5.IP地址的分类 6.IP地址 1.网络层的作用 寻址和路由的选择&#xff0c;连接的建立和终止&#xff0c;提供端到端的服务 单位是分组 2.网际协议的四个协议 ARP地址解析协议 &#xff1a;根据IP地址获取…

PortSwigger web缓存中毒(Cache Poisoning)

一、什么web缓存中毒&#xff1f; Web缓存中毒&#xff08;Web Cache Poisoning&#xff09;是一种攻击技术&#xff0c;攻击者通过操纵Web应用程序的缓存系统&#xff0c;将恶意或欺骗性内容注入到合法的缓存中&#xff0c;以欺骗用户或绕过安全控制。 Web缓存中毒的原理是利用…

Web UI 自动化测试框架哪个更适合你?

最近&#xff0c;项目上出于系统性稳定性、减少测试工作量考虑&#xff0c;打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码&#xff08;BDD 测试框架之一&#xff09;&#xff0c;这个框架选型的责任便落到了我的肩膀上了。 在我们进行框架选型的时候&…

执行器-Query 执行详解

一、主要流程 本期主要为大家分享&#xff0c;在经过语法、词法分析并生成 AST 语法树后的执行流程&#xff0c;下图是完整流程展示&#xff1a; 图 1 整体流程图 一个 Query 语句执行&#xff0c;从 connExecutor 接收&#xff0c;再到解析完成的 AST 语法树&#xff0c;最后…

【哈希表part01】| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

目录 ✿LeetCode242.有效的字母异位词❀ ✿LeetCode349.两个数组的交集❀ ✿LeetCode202.快乐数❀ ✿LeetCode1.两数之和❀ ✿LeetCode242.有效的字母异位词❀ 链接&#xff1a;242.有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的…

如何进行弱网测试?专项测试中最实用的方法了解一下……

目录 引言 一、什么是弱网测试&#xff1f; 二、为何要进行弱网测试&#xff1f; 三、如何做弱网测试&#xff1f; 四、弱网测试工具 引言 如今这个高度互联的时代里&#xff0c;网络环境对于应用程序的影响越来越重要。 而弱网测试就是用来检验应用程序在恶劣网络环境下…

AIGC与AidLux互联应用——AidLux端AIGC评测

使用diffusers生成图片&#xff0c;再通过socket编程完成pc端与AidLux之间通信&#xff0c;把生成的图像上传服务端&#xff0c;最后通过yolov5模型对生成的图像进行评测 视频流程如下&#xff1a; AIGC与AidLux互联应用——AidLux端AIGC评测 生成图片如图所示&#xff1a;

Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

1. Redis的Java客户端 Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端&#xff0c;可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式&#xff0c;也可以通过使用基于Netty的高性能Lettuce客户端&#xff0c;提升应用的性能…

【RabbitMQ教程】前言 —— 中间件介绍

&#x1f4a7; 【 R a b b i t M Q 教程】前言——中间件介绍 \color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【RabbitMQ教程】前言——中间件介绍&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云…

MySQL数据库基础 10

第十章 创建和管理表 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一…

Vue2模拟俄罗斯方块小游戏

目录 一、效果展示 二、代码分享 三、原理分析 3.1、界面搭建 3.2、方块创建 3.3、方块旋转 3.4、方块移动 3.5、移动判断 3.6、下落判断与清除 3.7、得分计算 一、效果展示 二、代码分享 <template><div class"game"><div class"ga…

调整IoTDB堆内存

最关键的是 MAX_DIRECT_MEMORY_SIZE &#xff0c;他等于MAX_HEAP_SIZE变量。 再往上翻又等于 max_heap_size_in_mb M大小 继续上翻 system_memory_in_mb 很明显就是系统内存&#xff0c;单位是M quarter_ 四分之一内存&#xff0c; half_ 一半内存。 假设物理内存为8G&a…