scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
Array
在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]。
1 // 数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化 2 val a = new Array[Int](10) 3 a(0) 4 a(0) = 1 5 val a = new Array[String](10) 6 7 // 可以直接使用Array()创建数组,元素类型自动推断 8 val a = Array("hello", "world") 9 a(0) = "hi" 10 val a = Array("leo", 30)
ArrayBuffer
在Scala中,如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使用ArrayBuffer。
1 // 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类 2 import scala.collection.mutable.ArrayBuffer 3 // 使用ArrayBuffer()的方式可以创建一个空的ArrayBuffer 4 val b = ArrayBuffer[Int]() 5 // 使用+=操作符,可以添加一个元素,或者多个元素 6 // 这个语法必须要谨记在心!因为spark源码里大量使用了这种集合操作语法! 7 b += 1 8 b += (2, 3, 4, 5) 9 // 使用++=操作符,可以添加其他集合中的所有元素 10 b ++= Array(6, 7, 8, 9, 10) 11 // 使用trimEnd()函数,可以从尾部截断指定个数的元素 12 b.trimEnd(5)
ArrayBuffer
// 使用insert()函数可以在指定位置插入元素 // 但是这种操作效率很低,因为需要移动指定位置后的所有元素 b.insert(5, 6) b.insert(6, 7, 8, 9, 10) // 使用remove()函数可以移除指定位置的元素 b.remove(1) b.remove(1, 3) // Array与ArrayBuffer可以互相进行转换 b.toArray a.toBuffer
遍历Array和ArrayBuffer
1 // 使用for循环和until遍历Array / ArrayBuffer 2 // 使until是RichInt提供的函数 3 for (i <- 0 until b.length) 4 println(b(i)) 5 // 跳跃遍历Array / ArrayBuffer 6 for(i <- 0 until (b.length, 2)) 7 println(b(i)) 8 // 从尾部遍历Array / ArrayBuffer 9 for(i <- (0 until b.length).reverse) 10 println(b(i)) 11 // 使用“增强for循环”遍历Array / ArrayBuffer 12 for (e <- b) 13 println(e)
数组常见操作
1 // 数组元素求和 2 val a = Array(1, 2, 3, 4, 5) 3 val sum = a.sum 4 // 获取数组最大值 5 val max = a.max 6 // 对数组进行排序 7 scala.util.Sorting.quickSort(a) 8 // 获取数组中所有元素内容 9 a.mkString 10 a.mkString(", ") 11 a.mkString("<", ",", ">") 12 // toString函数 13 a.toString 14 b.toString