Scala集合:Vector
什么是向量?
根据Scala文档,Vector是类似于List的数据结构。但是,它解决了List中随机访问的低效问题。
【示例】学习如何使用Scala的不可变向量来执行一些常见的操作,比如初始化Vector,访问特定索引的元素,向Vector添加元素,以及创建一个空Vector。
object VectorDemo { def main(args: Array[String]): Unit = { println("1: 初始化一个具有3个元素的向量") val vector1: Vector[String] = Vector("苹果","香蕉","葡萄干") println(s"vector1的元素 = $vector1") println("\n2: 访问向量在特定索引的元素") println(s"索引0的元素 = ${vector1(0)}") println(s"索引1的元素 = ${vector1(1)}") println(s"索引2的元素 = ${vector1(2)}") println("\n3: 使用:+ 在Vector末尾添加元素") val vector2 = vector1 :+ "火龙果" println(s"使用:+添加元素的向量 = $vector2") println("\n4: 使用+:在Vector前面添加元素") val vector3 = "草莓" +: vector1 println(s"使用+:在Vector前面添加元素的向量 = $vector3") println("\n5: 使用++ 将两个向量添加在一起") val vector4 = vector1 ++ Vector[String]("水蜜桃") println(s"使用++将两个向量添加到一起后 = $vector3") println("\n6: 初始化一个空向量") val emptyVector: Vector[String] = Vector.empty[String] println(s"String类型的空向量 = $emptyVector") } }
Vector 类是List 和Array 类的混搭。
它结合了Array 和List 的执行特性。它提供了恒定时间复杂度的索引访问和线性访问。它既允许快速的随机访问,也允许快速的更新功能。
使用向量是简单而直接的:
val v = Vector(1, 2, 3) v.sum // 6 v.filter(_ > 1) // Vector(2, 3) v.map(_ * 2) // Vector(2, 4, 6)
下面是使用示例:
val v1 = Vector(0,10,20,30,40); val v2 = v1 :+ 50; val v3 = v2 :+ 60; val v4 = v3(4); val v5 = v3(5);
下面这个示例代码中,演示了Vector的创建和操作:
// 创建一个Vector val x = IndexedSeq(1,2,3) // 通过索引进行访问 x(0) // 不可修改,创建新的Vector val a = Vector(1,2,3) val b = a ++ Vector(4,5) // 使用updated方法替换一个元素 val c = b.updated(0,10) // 实际上是返回一个新的Vector // 使用常用的过滤方法 val a = Vector(1,2,3,4,5) val b = a.take(2) val c = a.filter(_>2) // 貌似可变:var声明,结果赋给自身 var a = Vector(1,2,3) a = a ++ Vector(4,5) a // 混合可变变量(var)和一个不可变集合 var int = Vector(1) int = int :+ 2 int = int :+ 3 int.foreach(println)