数组
Array是定长数组,ArrayBuffer是变长数组
创建数组定长数组
1.new方式定义数组
中括号的类型就是数组的类型,
val arr1 = new Array[Int](10)
赋值,集合元素采用小括号访问
arr1(1) = 7
反编译
2.apply方式定义数组
val arr1 = Array(1, 2)
apply方法:
反编译
增删改查数组
- 索引访问
集合元素采用小括号+索引的方式访问
- 循环数组
for (i <- arr) { println(i) }
for (index <- arr.indices) {
printf("arr[%d]=%s", index , arr(index) + " ")
}
变长数组
val arr01 = new ArrayBuffer[Any](3) println(arr01.length) //0 println("arr01.hash=" + arr01.hashCode()) arr01.append(90.0,13) // println("arr01.hash=" + arr01.hashCode())
- 变长数组会为数组分配空间,但是用new创建是空的,虽然底层会分配空间
- 变长数组无论增删改查元素,不用改会导致对象的内存地址发生改变,那为什么hascode码前后不一致。
-
- 变长数组重写了hashcode函数,在python中我们认为hashcode是代表内存地址的,但是在scala中,马丁喜欢对hashcode重写,让集合hashcode元素一致的集合hashcode相等,并不能代表内存值。