4.Scala-数据结构

Posted lxl616

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.Scala-数据结构相关的知识,希望对你有一定的参考价值。

第4章 数据结构

4.1 主要的集合特质

  Scala 同时支持可变集合和不可变集合,不可变集合从不可变,可以安全
的并发访问。
两个主要的包:
1) 不可变集合:scala.collection.mutable
2) 可变集合: scala.collection.immutable
 
  Scala 优先采用不可变集合。集合主要分为三大类:序列(list)、集(set)、映射(map)。
  所有集合都扩展自 Iterable 特质。对于几乎所有的集合类,Scala 都同时
提供了可变和不可变的版本。
技术图片

 

技术图片

 


  Seq 是一个有先后次序的值得序列。IndexedSeq 能够通过整形下标快速
访问元素。
  Set 是一个没有先后次序的值集合。在 SortedSort 中,元素以某种排过序
的顺序被访问。
  Map 是一组键值对偶,SortedMap 按照键的排序访问其中的实体。
每个 Scala 集合特质或者类都有一个带有 Apply 方法的伴生对象(类似
于静态方法),这个 apply 方法可以用来构建该集合中的实体。
 
 技术图片
 
这样的设计叫“统一创建原则”。
 
 
 

4.2 数组 Array

4.2.1 定长数组

  如果需要一个定长数组,可以使用 Scala 中的 Array,Array 以 java 数组
的方式实现。
    //1.定长数组
    val arr1 = new Array[Int](10) //不定义[Int] 默认为 [Nothing]
    println(arr1.mkString(","))

    val arr2 = Array(1, 2, 3)
    println(arr2.mkString(","))
    arr2.apply(1)

    //赋值
    arr2(1) = 10 //等价于 arr2.update(1, 10)
    println(arr2.mkString(","))

    //追加
    val arr3 = arr1 :+ "??"
    val arr4 = "??" :+ arr1
    println(arr3.mkString(", "))

 

 

4.2.2 变长数组

变长数组可以使用 ArrayBuffer,Java 中有 ArrayList,
    //2.变长数组
    //小括号可以存放初始化的元素内容
    val arrBuffer1 = ArrayBuffer[Int](10, 9, 8)
    val arrBuffer2 = ArrayBuffer[Int]() //小括号中指定的元素
    println(arrBuffer1) //ArrayBuffer(10, 9, 8) 直接打印的是数组
    println(arrBuffer2) //ArrayBuffer()
    println(arrBuffer1.mkString(",")) //10,9,8

    //赋值,取值
    arrBuffer1(1) = -1
    println(arrBuffer1) //ArrayBuffer(10, -1, 8)
    println(arrBuffer1(1)) //-1
    println(arrBuffer1.apply(2)) //8

    //追加
    arrBuffer1.append(1, 2, 3)
    println(arrBuffer1) //ArrayBuffer(10, -1, 8, 1, 2, 3)

    val arrBuffer3 = arrBuffer1 :+ 90
    println(arrBuffer1) //ArrayBuffer(10, -1, 8, 1, 2, 3)
    println(arrBuffer3) //ArrayBuffer(10, -1, 8, 1, 2, 3, 90)

 

 

 
数组遍历:
for (i <- 0 until a.length)
    println(i + ": " + a(i))

for (elem <- a)
    println(elem)

 

4.2.3 数组转换 

  转换动作不会修改原数组,而是产生一个新的数组。
 
Array 与 ArrayBuffer 的互转:
ArrayBuffer = Array.toBuffer
Array = ArrayBuffer.toArray

 

 

4.2.4 多维数组 

和 Java 一样,多维数组通过数组的数组来实现,可以用 ofDim 方法。 
val matrix = Array.ofDim[Double](3, 4)

赋值:
matrix(row)(column) = 17.29

 

 

4.2.5 和 Java 数组的互操作 

  Scala 数组是通过 Java 进行实现的,所以可以进行互相转换操作,使用
scala.collection.convert. AsJavaConverters 或者 AsScalaConverters 进行转换 、
import scala.collection.JavaConverters._
import scala.collection.mutable.ArrayBuffer

val command = ArrayBuffer("ls", "-al", "/")
val pb = new ProcessBuilder(command.asJava) // Scala to Java

val cmd : Buffer[String] = pb.command().asScala // Java to Scala

cmd == command

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

以上是关于4.Scala-数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Scala基础语法

Scala语言概述

大数据Hadoop之——Scala基础

重学scala:scala中的变量方法函数

Scala快速入门

spark - scala独立编程