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)

《Flink原理深入与编程实战》