Scala中的数据结构

数组(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 是不可变的,一旦创建,其内容不能被修改。

HashMap 为动态可变映射

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
}

数据结构的应用

可用于多变量声明

val List(a,b,c)=List(1,2,"c")
val Array(e,d,f)=Array(1,2,3)
println(a)

这里声明了a,b,c,e,d,f 六个变量,前三个变量类型为Any,后面三个为Int

类型转换

var a:Int=10
var b=a.toDouble
var c=a.asInstanceOf[Double]
println(b.getClass)
println(c.getClass)

懒加载(Lazy)

懒加载是一种延迟初始化的机制,它允许在第一次访问时才实际计算或初始化某个值。这可以节省资源,并且只有在需要的时候才进行计算。

def main(args: Array[String]): Unit = {
  val a=add(10,20)
  val b=add(10,20)
  println(a)
  println(b)
  println("===============")
  lazy val c = add(10, 20)
  lazy val d = add(10, 20)
  println(c)
  println(d)
}
def add(x:Int,y:Int):Int={
  println("加载记录一次")
  x+y
}

由测试结果可知,没有懒加载情况加,当赋值完该函数就会加载一次,而懒加载修饰后后,该函数的加载随着调用才会加载

posted @ 2024-01-20 22:32  突破铁皮  阅读(4)  评论(0编辑  收藏  举报