Scala集合【上】

news/2025/1/11 18:44:04/

简介

Scala的集合类型和Java差不多,也有三类:序列Seq(对应Java的LIst)、集合Set(对应Java的Set)、映射Map(对应Java的Map),他们都扩展了(with)Iterable 这个特质。

对于几乎所有的集合类, Scala 都同时提供了 可变 不可变 的版本,分别位于以下两
个包
  • import scala.collection.immutable.Seq
  • import scala.collection.mutable.Seq
        不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而
不会对原对象进行修改。类似于 java 中的 String 对象。
        可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似
java StringBuilder 对象。

为什么要有可变和不可变这两种集合?

Scala之所以同时提供可变和不可变集合类型,是为了满足不同的编程需求和场景。

不可变集合类型在Scala中是默认的选择,它们具有以下优点:

  1. 线程安全:不可变集合是线程安全的,因为它们的内容在创建后不可更改。这使得在并发环境中使用不可变集合更加可靠和安全。
  2. 可重复使用:不可变集合可以在多个地方共享和重用。它们不会被意外的修改,从而减少了出错的可能性。
  3. 简单和可预测:不可变集合的行为是可预测和稳定的,因为它们的内容不会发生变化。这有助于编写更容易理解和维护的代码。

然而,有时候我们需要在程序中进行修改和更新集合的操作。这时候可变集合类型就派上用场了,它们具有以下优点:

  1. 更高的性能:可变集合在插入、删除和更新元素时通常具有更高的性能,尤其是对于大型数据集合。
  2. 可变状态修改:在某些场景下,处理可变集合可以更直观和方便。例如,在迭代和逐步构建集合的过程中,可变集合提供了更灵活的操作方式。
  3. 与Java互操作性:与Java集合库相比,可变集合更易于对接和交互操作,因为它们更接近于Java中的集合类型。

1、数组

1.1 不可变数组 Array

1、定义数组

可指定数组类型或者不指定(默认类型Any,即数组可以存放任何数据类型的数据)

//1. 初始化数组var arr:Array[Int] = Array(1,2,3,4,5)//2.在Scala中,默认的数组类型是Array[Any]  因此在不指定数组类型的时候可以存储任何数据类型val arr0 = Array(1,0.1,"hello",'c')//3. 声明数组但不赋值val arr1 = new Array[Int](10)

2、改

//2.1 直接修改某个索引对应的值arr1(0) = 1
//2.2 修改指定索引的值arr1.update(0,2)

3、增

不可变数组在新增元素后返回一个新的数组。

//给数组新增加元素 5val arr2:Array[Int] = arr1 :+ 5

4、打印数组

//1.遍历数组打印
for(i <- arr)println(i)//2.传递函数打印
arr.foreach(println)//2.1 自定义函数做参数打印
def printItem(i: Int): Unit = print(i + " ")
arr.foreach(printItem)//3.快捷打印
println(arr.mkString(","))

1.2 可变数组 ArrayBuffer

1、定义可变数组

//1.1 指定可变数组的数据类型val arr: ArrayBuffer[Int] = ArrayBuffer(1,2,3,5)
//1.2 不指定可变数组的数据类型val arr0 = ArrayBuffer(1,1.5,"scala",'w')//1.3 只声明不初始化 需要指定类型但不需要指定长度val arr1 = new ArrayBuffer[Int]()

2、增

//2.增加元素arr0.append("spark")arr0.+=(5)

3、删

//5.删除元素arr0.remove(0)

4、改

//4.修改元素arr0(2) = 5

5、插入

//3.插入元素arr0.insert(3,"hbase")

1.3、可变数组和不可变数组的转换

1、可变数组 => 不可变数组

//可变数组转为不可变数组
val arr: ArrayBuffer[Int] = ArrayBuffer(1,2,3,5)val new_arr = arr.toArray

2、不可变数组 => 可变数组

//不可变数组转为可变数组var arr:Array[Int] = Array(1,2,3,4,5)val new_arr = arr.toBuffer

1.4、多维数组

1、声明

//声明一个3x4的数组 即3个长度为4的一维数组val arr = Array.ofDim[Int](3,4)

2、打印多维数组

 for (i <- arr){for (j <- i){print(j + " ")}println()}

2、列表

Scala中的列表可以存放不同数据类型的数据 排序时安照字典序排序

2.1、不可变列表 List

List 是集合 Seq 下的一个集合类型,它默认是不可变集合。

1、声明创建一个List

//创建一个Listval list: List[Int] = List(1,2,5,4,3)//创建一个空Listval emptyList: List[Int] = Nil//可以存放不同数据类型的数据 排序时安照字典序排序val li = List("s",2,5,1.6)

2、在列表头部追加元素

   //在list头部追加数 0val ll = 0::list

3、在列表头部追加列表

    //将列表list1添加到list头部val list1:List[Int] = List(5,6,5)val l2 = list1:::list

4、打印列表

//1.
println(list.mkString(","))
//2.
list.foreach(println)

5、列表排序

    //返回一个排好序的List集合val sorted = list.sorted

2.2、可变列表 ListBuffer 

1、创建一个可变集合

    val list0 = ListBuffer(1,2,5,4,8)//可以存放不同数据类型的数据 排序时安照字典序排序val list = ListBuffer(1,1.2,"s")//想要存放任意数据类型就设为 Anyval buffer = ListBuffer.empty[Int]

2、向集合中添加数据

//添加数据buffer.append(5)
//指定位置插入数据buffer.insert(0,2)

3、打印集合

    println(buffer.mkString(","))buffer.foreach(println)

4、修改数据

 buffer(0) = 6

5、删除数据

   //删除指定元素buffer.-=(5)//通过下标索引来删除元素buffer.remove(0)

3、Set 集合

        默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。
        mutable.Set 默认是乱序的,如果想要有序可以用链式的LinedHashSet。

3.1、不可变 Set

    val set = Set(1,1,2,2,3,3)println(set.mkString(","))  //1,2,3

3.2、可变Set mutable.Set

声明集合

    val set = mutable.Set(1,2,3,4,5,6)

删除指定元素

由于Set集合默认是无序的,所以也就没有通过下标删除元素的方法,它可以直接删除指定元素。

    //删除指定元素set-=(7)//删除指定元素set.remove(8)

打印集合

println(set)    //Set(1,5,2,6,3)
println(set.mkString(","))    //1,5,2,6,3,4


http://www.ppmy.cn/news/644530.html

相关文章

20230627----重返学习-全局处理vue-Vue.use()-element-ui说明-vue2中原型链-如何设置样式

day-100-one hundred-20230627-全局处理vue-Vue.use()-element-ui说明-vue2中原型链-如何设置样式 全局处理vue 创建/src/global.js&#xff0c;用于设置全局相关的配置。 fang/f20230627/day0627/src/global.js import Vue from "vue";// [vue-全局配置](https://v…

Adobe系列错误代码解决方案汇总

Adobe系列错误代码解决方案汇总 近来很多小伙伴在安装Adobe系列软件的时候遇到了这样那样的错误&#xff0c;在后台给我留言&#xff0c;在一个一个解决问题的时候我就萌生了把所有问题汇总起来的想法。 因为毕竟一个个回复不如把问题摊开来呈现给大家更为直接&#xff0c;当…

adobe黑体std能商用_adobe黑体std字体下载

Adobe 黑体 Std R字体又称之为adobeheitistd regular字体,是adobe官方专为设计师而开发的一款实用字体,该字体线条粗细适中,字形大方得体,整体效果非常出色,且字库完整,能够适用于产品包装、广告宣传、出版印刷、商标用字、商业网站、影视影像视频、书籍出版印刷等设计领…

mac显示无法连接adobe服务器,Mac安装Adobe软件,如遇Error提示解决方法

Mac10.15.3 安装Adobe Photoshop 2020的时候一直提示Error错误 The installation cannot continue as the installer file may be damaged. Download the installer file again. 看到这种问题&#xff0c;一般第一想法就是安装包损坏了&#xff0c;本能的会再下载一遍甚至多遍&…

adobe黑体std能商用_adobe字体版权?

刚刚查到了adobe的官网信息&#xff0c;有如下内容Font licensing center | Adobe Type​www.adobe.com 再直接贴上一段翻译过来的内容&#xff1a; 问&#xff1a;我可以将Adobe字体用于商业项目和客户端工作吗&#xff1f; 答&#xff1a;是的&#xff0c;Adobe的标准 字体许…

Adobe Acrobat Reader离线安装包下载

Adobe Acrobat Reader官网默认下载在线安装包&#xff0c;离线包下载地址可到https://get.adobe.com/cn/reader/enterprise/。

Adobe官网正版Ps+LrC软件免费拿,最高还可抽取99.99元牛年红包!

2021.2.8—2021.2.18成功报名Adobe国际认证职业技能认证&#xff0c;除可获得对应认证专家证书。还可免费享受Adobe国际认证牛年福利五重好礼 报名立减199元&#xff08;前20名免费领取Adobe定制马克杯&#xff09; Photoshop CCLightroom Classice正版软件订阅&#xff0c;免…

Adobe国际认证中国官网认证科目介绍

Adobe国际认证是Adobe公司推出的权威国际认证&#xff0c;在128个国家和地区均有发行&#xff0c;19种考试语言&#xff0c;是面向全球Adobe软件的学习和使用者&#xff0c;提供的一套全面科学&#xff0c;严谨高效的考核体系&#xff0c;通过实际应用操作的测评体系&#xff0…