一、定长数组Array
数据的构建
- 使用new关键字创建一 个定长数组
//长度为30的整数数组,所有元素初始化为0 val array = new Array[Int] (30)
- 直接使用Array创建 并初始化一个数组
//长度为2的Array【String】类型是推断出来的,所以就不需要new val sArr = Array("Hello", "World")
- 数组的赋值: 数组名(index) = 值
// 使用()而不是[]来访问元素 sArr(0) = "He1lo Tom"
- 获取数组元素
// 数组名(index) val result = sArr(1)
代码示例:
package arrayDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/9/7 * @time : 9:08 上午 */ object ArrayDemo1 { /** * scala集合体系之定长数组的操作 */ def main(args: Array[String]): Unit = { // 创建int类型,长度为3的数组 val array = new Array[Int](3) // 使用数组Array的半生对象来创建数组 val strArr = Array[String]("java","python","hadoop") // crud // 获取数组指定索引的值 println("index=1对应的数组的值:"+strArr(1)) // 修改数组指定索引对应的值 strArr(1) = "c" println("index=1对应的数组的值:"+strArr(1)) // 判断 if (strArr.contains("python")){ println("python在数组里") }else{ println("python不在数组里") } // 长度 println("strArr.length == strArr.size? "+(strArr.length == strArr.size)) // 遍历 for (str <- strArr){ println(str) } } }
运行结果:
index=1对应的数组的值:python index=1对应的数组的值:c python不在数组里 strArr.length == strArr.size? true java c hadoop
二、可变数组ArrayBuffer
1、对于那种长度按需要变化的数组,Java有ArrayList, C++有vector. Scala 中的等效数据结构为ArrayBuffer
2、ArrayBuffer是一种mutable的数据容器,相对于Array来说,最大的区别就是可以自由增删元素。当ArrayBuffer构建完毕后,还可以转换为immutable的Array容器.
代码示例:
package arrayDemo import scala.collection.mutable.ArrayBuffer /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/9/7 * @time : 10:36 上午 */ object ArraBufferDemo { def main(args: Array[String]): Unit = { // 可变数组的构建 val arraybuffer = new ArrayBuffer[Int](3) // 3是可变数组内部维护的定长数组的初始化长度,当达到这个阈值时,进行扩容 var strArr = new ArrayBuffer[String]() // 使用ArrayBuffer的半生对象来创建对象,创建一个string的ArrayBuffer,有两个初始化元素 strArr = ArrayBuffer[String]("hello","you") // crud println(arraybuffer) println("增加------------------") arraybuffer.append(1) println(arraybuffer) arraybuffer.append(2,3,4,5,6) println(arraybuffer) println("插入------------------") arraybuffer.insert(1,-1,8) // 在指定的索引位置上面插入n个y元素 println(arraybuffer) println("获取------------------") println(arraybuffer(3)) // 获取指定索引位置的元素 println("修改------------------") arraybuffer(4) = -4 println(arraybuffer(4)) println("remove删除------------------") println("删除前"+arraybuffer) val ret = arraybuffer.remove(2) // 删除并获取指定索引上的元素 println("arraybuffer.remove(2):"+ret) println("删除后"+arraybuffer) // 删除多个元素 arraybuffer.remove(1,3) // 从指定索引位置开始删除指定个数元素 println("arraybuffer.remove(1,3):"+arraybuffer) println("drop删除------------------") val newAb = arraybuffer.drop(2) // 删除集合前n个元素,将剩余元素组成一个新的集合,而原集合不变 println("arraybuffer.drop(2)之后的ab:"+arraybuffer) println("arraybuffer.drop(2)的返回值:"+newAb) println("判断------------------") if (arraybuffer.contains(4)){ println("4在数组里") }else{ println("-4不在数组里") } println("长度------------------") println("sarraybuffer.length == arraybuffer.size? "+(arraybuffer.length == arraybuffer.size)) } }
运行结果:
ArrayBuffer() 增加------------------ ArrayBuffer(1) ArrayBuffer(1, 2, 3, 4, 5, 6) 插入------------------ ArrayBuffer(1, -1, 8, 2, 3, 4, 5, 6) 获取------------------ 2 修改------------------ -4 remove删除------------------ 删除前ArrayBuffer(1, -1, 8, 2, -4, 4, 5, 6) arraybuffer.remove(2):8 删除后ArrayBuffer(1, -1, 2, -4, 4, 5, 6) arraybuffer.remove(1,3):ArrayBuffer(1, 4, 5, 6) drop删除------------------ arraybuffer.drop(2)之后的ab:ArrayBuffer(1, 4, 5, 6) arraybuffer.drop(2)的返回值:ArrayBuffer(5, 6) 判断------------------ 4在数组里 长度------------------ sarraybuffer.length == arraybuffer.size? true
三、变长数组通用操作
package arrayDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/9/15 * @time : 8:23 下午 */ object ArrayCommonOps { // Scala数组通用操作 def main(args: Array[String]): Unit = { // 使用数组的伴生对象创建了一个Array的实例 var array = Array(1,2,3,4,5,6) // 定长数组转化为可变数组 val ab = array.toBuffer println(ab) // 不定长数组转化为定长数组 array = ab.toArray println(array) // maString 将数组/集合,转化为自定义格式的字符串 println(array.mkString) // 就是将集合中的每一个元素拼接成字符串 println(array.mkString(",")) // 就是将集合中的每一个元素按照分隔符拼接成字符串 println(array.mkString("[",",","]")) // 就是将集合中的每一个元素按照分隔符拼接成字符串,同时添加起始和结束字符串 // 普通遍历数组 println("普通遍历数组") for(i <- ab){ println(i) } // 高级数组遍历方式--foreach函数 println("高级数组遍历方式--foreach函数") array.foreach(num => println(num)) // 求和 var sum = 0 for(i <- ab){ sum += i } println("sum:"+sum) println("sum:"+ab.sum) // 最大值 var max = array(0) var min = array(0) for(i <- 1 until array.length){ if(max < array(i)){ max = array(i) } if(min > array(i)){ min = array(i) } } println("数组array中的最大值"+max) println("数组array中的最小值"+min) // Scala中求数组的最大最小值 println("数组array中的最大值"+array.max) println("数组array中的最小值"+array.min) // 从小到大排序 var sortedArray = array.sorted println("排序之后的集合"+sortedArray.mkString(",")) // 从大到小排序 sortedArray = array.sortWith((v1,v2) => v1>v2) println("排序之后的集合"+sortedArray.mkString(",")) } }
运行结果:
ArrayBuffer(1, 2, 3, 4, 5, 6) [I@96532d6 123456 1,2,3,4,5,6 [1,2,3,4,5,6] 普通遍历数组 1 2 3 4 5 6 高级数组遍历方式--foreach函数 1 2 3 4 5 6 sum:21 sum:21 数组array中的最大值6 数组array中的最小值1 数组array中的最大值6 数组array中的最小值1 排序之后的集合1,2,3,4,5,6 排序之后的集合6,5,4,3,