开发者学堂课程【Scala 核心编程 - 进阶:Array 和 ArrayBuffer 相互转换】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9026
Array 和 ArrayBuffer 相互转换
内容介绍:
一、变长数组分析小结
二、定长数组与变长数组的转换
一、变长数组分析小结
1) ArrayBuffer 是变长数组,类似 java 的 ArrayList
2 ) val arr2 = ArrayBuffer[lnt]()也是使用的 apply 方法构建对象
3)def append(elems: A*) { appendAll(elems)}接收的是可变参数.
4)每 append 一次,arr 在底层会重新分配空间,进行扩容,arr2的内存地址会发生变化,也就成为新的 ArrayBuffer
二、定长数组与变长数组的转换
1.说明
在开发中,我们可能使用对定长数组和变长数组,进行转换
arr1.toBuffer//定长数组转可变数组
arr2.toArray //可变数组转定长数组
2.注意事项
1) arr2.toArray 返回结果才是一个定长数组,arr2本身没有变化
2) arr1.toBuffer 返回结果才是一个可变数组,arr1本身没有变化
3.代码演示
import scala.collection.mutable.ArrayBuffer
object Array22ArrayBuffer {
def main( args : Array[string]): unit = {
val arr2 = ArrayBuffer[Intl]()
//追加值
arr2.append(1,2,3)
println( arr2)
//1.arr2.toArray 调用 arr2的方法 toArray
//2.将 ArrayBuffer ---> Array
//3.arr2本身没有任何变化
val newArr = arr2.toArray;
println( newArr)
//1. newArr.toBuffer 是把 Array->ArrayBuffer
//2.底层的实现
/*
override def toBuffer[A1 >: A]: mutable.Buffer[Al] = {val result = new mutable.ArrayBuffer[A1](size)
copyToBuffer( result)
result
*/
//3. newArr本身没变化
val newArr2 = newArr.toBuffer
newArr2.append ( 123)
println( newArr2)
//案例演示+说明
4.运行结果
D : \program\jdk8\bin\java ..ArrayBuffer(1,2,3)
[I@34ce8af7
ArrayBuffer(1,2,3,123)
Process finished with exit code 0
假如在开发中,原先为了效率比较高,弄了一个 array,但是根据一个需求,需要把里面的东西移植到 Arreybuffer 里面去进行动态的修改,但是可能是临时做一下,临时做完之后还要回到 Arrey 继续工作,这个时候就可以用 Arreybuffer。