Scala学习——数组/映射/元组

【《快学Scala》笔记】java

数组  /  映射  /  元组算法

 

1、数组数组

一、定长数组函数

声明数组的两种形式:ui

  • 声明指定长度的数组 val 数组名= new Array[类型](数组长度)

  

  • 提供数组初始值的数组,无需new关键字

  

Scala声明数组时,须要带有Array类名,且使用 () 来指明长度或提供初始值序列。scala

在JVM中,Scala的Array以Java数组的方式实现。如arr在JVM中的类型对应java.lang.String[],charArr对应char[]。3d

二、变长数组对象

  

ArrayBuffer,全称scala.collection.mutable.ArrayBuffer,相似于Java中的ArrayList和C++中的vector,是长度可变数组类型的结构,称为数组缓冲。blog

经过:val 名 = ArrayBuffer[类型]() 来声明,声明ArrayBuffer时须要指明类型。排序

经过 += 操做符来添加元素或序列,++= 操做符来拼接数组。

【在ArrayBuffer的尾端添加或删除元素是一个高效的操做。】 ArrayBuffer还支持在指定位置插入、删除元素。

ArrayBuffer到数组的转换: toArray方法

  

三、数组遍历

经过for循环来遍历数组

  

指定遍历数组的步长——经过until(上界, 步长)

  

  

经过reverse函数逆序遍历数组:

  

四、能够经过 for循环+yield 来得到新的数组或ArrayBuffer

  

  

经过for+yield操做数组或ArrayBuffer以后将获得新的数组或ArrayBuffer。

五、操做数组/数组缓冲经常使用函数

  

求和、求最大最小值、数组排序。经过sorted函数对数组或ArrayBuffer排序时,返回的是一个新的数组或ArrayBuffer,原有的不变。

能够直接对数组调用排序算法,可是不能对ArrayBuffer排序。

  

quickSort是直接修改原数组,而sorted方法是返回新数组

六、多维数组

Scala中的多维数组同Java中同样,多维数组都是数组的数组。

  • 经过 Array.ofDim[类型](维度1, 维度2, 维度3,....)来声明多维数组,如声明二维数组;

  

  从二维数组的初始化中,咱们能够看到,多维数组在Scala中也是数组的数组。

  • 经过 Array[ Array[Int]](维度1) 来声明数组,能够声明不规则数组;

  

  多维数组是数组的数组,按照这种性质来声明多维数组,如例子中的二维数组,声明时,须要指定最外围的数组大小。

【注:能够经过scala.collection.JavaConversions包中隐式转换方法来实现Scala容器类与Java中类的转换。】

 

2、映射

一、映射构造

对偶,即名值对。能够经过 -> 操做符来定义对偶, 名->值 运算的结果是( 名, 值 ); 

  

也能够声明对偶形式的变量

  

映射是由对偶构成的,映射是对偶的集合。

  • 声明不可变映射,直接使用Map来声明时,默认是不可变映射类型。

  

  【注: 不可变映射维持元素插入顺序。】

  • 声明可变映射(scala.collection.mutable.Map)

  

  【注:放入可变映射中的值并未按照放入顺序来排序的。】

  经过for循环来修改可变Map中的值;

  

  【注:映射可变、不可变指的是整个映射是否可变,包括元素值、映射中元素个数、元素次序等。】

  • 声明空映射

  直接经过 new Map[类型1, 类型2]() 来定义映射会报错,由于Map是抽象的,没法实例化。

  定义空映射时,须要指定映射的实现类,经过new来定义;

  

  分别定义不可变映射与可变映射。注,直接使用 new HashMap定义时会报错。

二、映射经常使用操做

  • 判断映射中是否含有某个键: map.contains(键值)

  

  • 使用 += 向可变映射中添加元素或拼接映射

  

  • 使用 -= 移除可变映射中的键及对应元素

  

  • 不可变映射可经过 + 操做符返回一个新的不可变映射;不可变映射可经过 - 操做符返回一个新的不可变映射;

  

  • 映射遍历

  

  • 获取映射的键集合keySet和值集合

  

  经过映射的 keySet 方法能够得到映射的由键值构成的集合;经过 values 方法能够得到映射的值集合的Interable对象,应用于循环中。

  Scala的keySet / values 方法相似于Java中的映射方法。

三、Scala中映射的底层实现要么基于哈希表,要么基于平衡树,其中基于平衡树的映射内部是有序的。

  

  Scala目前基于平衡树的映射只提供了不可变版本。

  【注:构建可变有序映射可借助Java的TreeMap。】

四、可变映射中,若要构建维持元素插入顺序的映射可经过LinkedHashMap。

五、经过scala.collection.JavaConversions.mapAsScalaMap可将Java的Map转换为Scala类型的Map;经过scala.collection.JavaConversions.mapAsJavaMap可将Scala的映射转换为Java类型的映射。

六、toMap方法

  使用toMap方法可将对偶组成的集合转化为映射。

  

 

3、元组

一、元组是不一样类型的值的汇集;对偶是最简单的元组。

二、元组表示

  经过将不一样的值用小括号括起来,即表示元组。

  

  上例中元组的类型就是 (Int, Double, Char, String) ;元组中能够存放不一样类型的值。

三、元组访问

  • 元组中的元素称为组元。能够经过 _一、 _2 、_3 的形式来访问对应下标的组元。

  

  【注:元组中组元下标从1开始。】

  • 经过模式匹配来访问元组中的值

  

  忽略不须要的值。在模式匹配时,经过 _ (万能匹配符)来为不须要获取值的组元占位,每一个 _ 仅能够为一个组元占位。

  

四、元组可用于函数返回多个值的情形

  

  上例中,函数定义返回值类型为元组 (Int, String);

相关文章
相关标签/搜索