Scala语言学习笔记——数据结构集合

本文详细介绍了Scala中的数据结构集合,包括不可变与可变集合的区别,重点讲解了数组、元组、列表(List和ListBuffer)、队列(Queue)、映射(Map)以及集(Set)的创建、操作和特性。特别是数组的定长与变长形式,元组的灵活性,列表的不可变性,队列的FIFO原则,以及映射的有序与无序特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala 集合概述

① Scala同时支不可变集合可变集合,不可变集合可以安全的并发访

② Scala集合中个主要的包: 可变集合:  scala.collection.mutable      不可变集合:scala.collection.immutable

③ Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可(mutable)不可(immutable) 

④ Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类 

可变集合和不可变集合举例

① 可变集合:可变集合,就是这个集合本身可以动态变化的,比如:ArrayList , 是可以动态增长的。scala.collection.mutable 包中的集合类声明后则是可变的,这里的可变指的是原集合本身的可变,所以处理可变集合意味着你需要去理解哪些代码的修改会导致集合同时改变。

② 不可变集合:Scala不可变集合,就是这个集合本身不能动态变化,类似java,是不可以动态增长或缩减的。scala.collection.immutable 包中的集合类声明后是不可变的,这个不可变对引用类型而言就是指的引用地址不可变,例如一个集合创建之后将不会改变,可以对该集合实现添加、移除或修改等操作,但是该操作不是修改了原集合的值,而是返回了一个新的集合将原集合的值经过操作后的值放入新集合返回给你而已,原集合值还是没有改变。

不可变集合继承层次一览

 

 不可变集合小结

① Set、MapJava中也有的集合,而Seq是Java没有的,我们发现ListSeq了,因此Scala中的List就和java中的List不是同个概念了

② 我们前面的for循环有一个 1 to 3,就是IndexedSeq 下的Vector,String也是属于IndexeSeq

③ 我们发现经典的数据结构,比Queue Stack被归属到LinearSeq

④ 大家注意Scala中的Map体系有一SortedMap,说明ScalaMap也可以支排序

⑤ IndexSeq 和 LinearSeq 的区别,IndexSeq是通过索引来查找和定位此速度快,比如String就是一个索合,通过索引即可定位,而LineaSeq 是线型的,即有头尾的概念种数据结构一般是通过遍历来查找的价值在于应用到一体的应用场(电商网站大数据荐系统 :最近浏览的10个商品)

Scala可变集合继承关系一览图

  

1.Scala 数组

1.1 数组-定长不可变数(明泛)

     在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组,但内容可以修改。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]。

1) 声明方式一:

//声明一个长度为5,泛型为Int类型的数组,这种方式必须指定具体的泛型类型
val arr = new Array[Int](5)

2)声明方式二:

val arr = Array(1,2,"a",true)

    通过Array(数组元素)方式声明数组,相当于调用了Array类的apply方法new了一个数组,然后对其赋值返回,这种方式可以不用指定泛型,可以添加不同类型的元素,因为这种方式默认是调用Array类中的apply方法,这个apply方法有很多指定好的参数具体数据类型的重载方法,例如:def apply(x: Int, xs: Int*): Array[Int],但其中有一个def apply[T: ClassTag](xs: T*): Array[T]={}方法,该方法没有指定泛型的具体类型,所以使用这种方式定义数组时,可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值