1.1. 数组1.1.1. 定长数组和变长数组
(1)定长数组定义格式:
val arr=new Array[T](数组长度)
(2)变长数组定义格式:
val arr = ArrayBuffer[T]()
注意需要导包:import scala.collection.mutable.ArrayBuffer
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package cn.itcast.scala import scala.collection.mutable.ArrayBuffer object ArrayDemo {
def main ( args : Array[String] ) {
/ / 初始化一个长度为 8 的定长数组,其所有元素均为 0 val arr 1 = new Array[Int] ( 8 ) / / 直接打印定长数组,内容为数组的hashcode值 println ( arr 1 ) / / 将数组转换成数组缓冲,就可以看到原数组中的内容了 / / toBuffer会将数组转换长数组缓冲 println ( arr 1. toBuffer ) / / 注意:如果 new ,相当于调用了数组的apply方法,直接为数组赋值 / / 初始化一个长度为 1 的定长数组 val arr 2 = Array[Int] ( 10 ) println ( arr 2. toBuffer ) / / 定义一个长度为 3 的定长数组 val arr 3 = Array ( "hadoop" , "storm" , "spark" ) / / 使用 ( ) 来访问元素 println ( arr 3 ( 2 ) ) / / 变长数组(数组缓冲) / / 如果想使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer包 val ab = ArrayBuffer[Int] ( ) / / 向数组缓冲的尾部追加一个元素 / / + = 尾部追加元素 ab + = 1 / / 追加多个元素 ab + = ( 2 , 3 , 4 , 5 ) / / 追加一个数组 + + = ab + + = Array ( 6 , 7 ) / / 追加一个数组缓冲 ab + + = ArrayBuffer ( 8 , 9 ) / / 打印数组缓冲ab / / 在数组某个位置插入元素用insert,从某下标插入 ab.insert ( 0 , -1 , 0 ) / / 删除数组某个位置的元素用 remove 按照下标删除 ab. remove ( 0 ) println ( ab ) } } |
|
1.1.2. 遍历数组
1.增强for循环
2.好用的until会生成脚标,0 until 10 包含0不包含10
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
package cn.itcast.scala object ForArrayDemo {
def main ( args : Array[String] ) {
/ / 初始化一个数组 val arr = Array ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) / / 增强 for 循环 for ( i < - arr ) println ( i ) / / 好用的until会生成一个Range / / reverse 是将前面生成的Range反转 for ( i < - ( 0 until arr.length ) . reverse ) println ( arr ( i ) ) } } |
|
1.1.3. 数组转换
yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 |
package cn.itcast.scala object ArrayYieldDemo {
def main ( args : Array[String] ) {
/ / 定义一个数组 val arr = Array ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) / / 将偶数取出乘以 10 后再生成一个新的数组 val res = for ( e < - arr if e % 2 = = 0 ) yield e * 10 println ( res.toBuffer ) / / 更高级的写法 , 用着更爽 / / filter是过滤,接收一个返回值为 boolean 的函数 / / map相当于将数组中的每一个元素取出来,应用传进去的函数 val r = arr.filter ( _ % 2 = = 0 ) .map ( _ * 10 ) println ( r.toBuffer ) } } |
|
1.1.4. 数组常用算法
在Scala中,数组上的某些方法对数组进行相应的操作非常方便!
1.2. 映射
在Scala中,把哈希表这种数据结构叫做映射。
1.2.1. 构建映射
(1)构建映射格式
1、val map=Map(键 -> 值,键 -> 值....)
2、利用元组构建 val map=Map((键,值),(键,值),(键,值)....)
1.2.2. 获取和修改映射中的值
(1)获取映射中的值:
值=map(键)
好用的getOrElse
注意:在Scala中,有两种Map,一个是immutable包下的Map,该Map中的内容不可变;另一个是mutable包下的Map,该Map中的内容可变
例子:
注意:通常我们在创建一个集合是会用val这个关键字修饰一个变量(相当于java中的final),那么就意味着该变量的引用不可变,该引用中的内容是不是可变,取决于这个引用指向的集合的类型
1.3. 元组
映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值。
1.3.1.