Scala中的数据结构

liyiyang / 2024-01-21 / 原文

数组(Array)

数组是一个可变的数据结构,长度固定,元素的类型必须一致。

Array是一个长度固定的数组,ArrayBuffer为一个长度可变的数组,可以动态添加和删除元素

var arr:Array[Int] = Array(1,2,3,4,5) // 一维数组
var arrM:Array[Array[Int]] =Array(Array(1,2,3,4),Array(5,6,7)) // 多维数组
arrM=Array.ofDim(4,4) //用方法声明多维数组
for(i <- arrM){ // 遍历
  for(j <- i){
    println(j)
  }
}
println(arr(0)) // 取值
println(arrM(1)(2)) //多维取值
val anyArr:Array[AnyVal] =Array(1,2.0,true) // AnyVal为这些类型公有的父类型,因此为同类型

该数据结构还有很多的方法例如max,min等,可以通过查询文档调用

 元组(Tuple

元组(Tuple)是一种不可变的、有序的集合,允许不同类型的元素存储在其中。元组的大小是固定的,一旦创建,其元素个数不能改变。scala中为Tuple1到Tuple22,分被为1到22长度的元组

val t1:Tuple2[Int,String]=(0,"add") // 显示写法
val t2:(Int, String)=(1,"add") // 隐式写法
val t3=(1,true,"add") // 直接赋值
t3._3 //元组取值

列表(List)

List 是一种不可变的、有序的集合,用于存储相同类型的元素。它是基于链表实现的,每个元素都包含一个值和指向下一个元素的引用。由于是不可变的,对 List 进行操作会产生新的 List,而原始 List 不会受到影响。

ListBuffer 为动态可变列表

var l=List[Int](1,2,3,4,5,6)
l=1::2::3::4::Nil // 相当于用一个空列表加上前面的元素构成新列表

集合(Set)

Set 是一种集合类型,用于存储独特(不重复)元素。Set 提供了高效的成员检查操作,并且是不可变的,即一旦创建,其内容无法更改。

HashSet 为动态可变集合

映射(Map)

Map 是一种集合类型,用于存储键值对。每个键对应一个值,键是唯一的,且与值之间存在映射关系。Map 是不可变的,一旦创建,其内容不能被修改。

val map1=Map[String,Int]("scala"->20,("java",60)) // 可以使用k->v,也可以用元组(k,v)
println(map1("scala")) // 取值
println(map1.get("scala")) // 取值
println(map1.getOrElse("python",0)) // 防止k不存在,如果不存在默认返回0
map1.keySet // 获取所有的key
map1.values // 获取所有的value
for(kv <- map1){ // 遍历map
   println(kv._1) // key
   println(kv._2) // value
}