Array
在scala中,Array代表的含义与Java类似,也是长度不可变的数组,此外
由于Java和scala都是运行在JVM中,双方可以互相调用,因此scala的底层
实际上是Java数组,例如字符串的数组在底层实际上就是Java的 String [] 数组
整数数组在底层实际上是Java的int []
数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化
可以直接使用Array()创建数组,元素类型自动推断
获取数组内的值
当数组内的元素类型不一致时,scala自动推断数组类型为Any
ArrayBuffer
在scala中,如需要像Java中ArrayList这种长度可变的集合类,则可以使用ArrayBuffer
ArrayBuffer类不能直接使用,使用之前需要先导入ArrayBuffer类
使用ArrayBuffer的方式可以创建一个空的ArrayBuffer
使用+=操作符,可以添加一个元素或者多个元素,这个方法在Spark源码中大量使用
使用++=操作符可以添加其他集合中的所有元素
运行结果:
使用trimEnd,可以从尾部截断指定个数的元素,b.trimEnd(5),
运行结果:
使用b.insert(3,5) 在指定位置插入元素
运行结果:
Array与ArrayBuffer互相转换
运行结果:
遍历Array和ArrayBuffer
用for循环和until遍历Array和Arraybuffer
Until是RichInt提供的函数
跳跃遍历Array和Arraybuffer
从尾部遍历Array和Arraybuffer
使用增强for循环遍历Array和ArrayBuffer
数组常见操作
数组元素求和
获取数组最大值
对数组进行排序
获取数组中所有元素内容
数组转换
对Array进行转换,获取的还是Array,对一个数组求平方,用yield
对ArrayBuffer进行转换,获取的还是ArrayBuffer
结合if守卫仅转换需要的元素
使用函数式编程转换数组,filter过滤出这个数组中除2等于0的,然后map成另一个数组,将过滤出的数乘以2
算法案例:移出第一个负数之后所有的负数
构建数组,每发现第一个负数之后的负数就移出掉
Val a =ArrayBuffer[Int]()
a += (1,2,3,4,5,-1.-3.-5,-7)
运行结果:
算法案例:移出第一个负数之后所有的负数
遍历Array和ArrayBuffer
遍历Array和ArrayBuffer