知识点
- 长度固定使用Array,长度有变化使用ArrayBuffer
- 提供初始值时不要使用new
- 用()来访问元素
- for(elem <- arr)遍历元素
- for(elem <- arr if ...) yield ...将原数组转为新数组
定长数组
- 10个整数的数组,所有元素初始为0
1. scala> val nums = new Array[Int](10) 2. nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) • 10个元素的字符中数组,所有元素初始化为null
scala> val str = new Array[String](10) str: Array[String] = Array(null, null, null, null, null, null, null, null, null, null)
- 提供初始值就不需要new,长度为2的Array[String],类型是推断出来的
5. scala> val str1 = Array("Hello", "Scala") 6. str1: Array[String] = Array(Hello, Scala) • 使用()来访问元素 7. scala> val s = str1(0) 8. s: String = Hello
变长数组
- 与Java中ArrayList功能等效的数据结构ArrayBuffer
- 初始化一个空的可变长数组,准备存入整数
scala> import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.ArrayBuffer scala> val b = ArrayBuffer[Int]() b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
- 用+=在尾添加元素或多个用括号包都来的元素
scala> b += 1 res0: b.type = ArrayBuffer(1) scala> b += (1, 2, 3) res1: b.type = ArrayBuffer(1, 1, 2, 3)
- 用++=操作符追加任何集合
11. scala> b ++= Array(6, 8, 9) 12. res2: b.type = ArrayBuffer(1, 1, 2, 3, 6, 8, 9) • 移除最后2个元素scala> b.trimEnd(2) scala> b res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 6)
- 可在任意位置插入或移除元素(不高效,所有在那个位置后面的元素都必须被平移)
// 在下标2之前插入 scala> b.insert(2, 4) scala> b res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 4, 2, 3, 6) // 在下标2之前插入多个元素 scala> b.insert(2, 4, 5) scala> b res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 4, 5, 4, 2, 3, 6)
- 定长数组与变长数据转换
// 转成定长数组 scala> b.toArray res9: Array[Int] = Array(1, 1, 4, 5, 4, 2, 3, 6) // 转成变长数组 scala> b.toBuffer res10: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 1, 4, 5, 4, 2, 3, 6)
遍历数组
// 使用下标访问 scala> for (i <- 0 until b.length) | println(i + ":" + b(i)) 0:1 1:1 2:4 3:5 4:4 5:2 6:3 7:6 // 不使用下标 scala> for(elem <- b) | println(elem)
数组转换
- for推导式,从一个数组转换,生成一个全新的数组
1. scala> val a = Array(2, 3, 5, 7) 2. a: Array[Int] = Array(2, 3, 5, 7) 3. 4. scala> val res = for(elem <- a) yield 2 * elem 5. res: Array[Int] = Array(4, 6, 10, 14) 6. 7. scala> a 8. res13: Array[Int] = Array(2, 3, 5, 7) • for推导式,从一个ArrayBuffer转换,生成一个全新的ArrayBuffer 9. scala> a.toBuffer 10. res14: scala.collection.mutable.Buffer[Int] = ArrayBuffer(2, 3, 5, 7) 11. 12. scala> val res = for(elem <- res14) yield 2 * elem 13. res: scala.collection.mutable.Buffer[Int] = ArrayBuffer(4, 6, 10, 14)
欢迎留言交流,敬请期待下一篇~