Scala核心编程_第11章_2节 数据结构-数组列表元祖

数组

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())
  1. 变长数组会为数组分配空间,但是用new创建是空的,虽然底层会分配空间
  2. 变长数组无论增删改查元素,不用改会导致对象的内存地址发生改变,那为什么hascode码前后不一致。
    • 变长数组重写了hashcode函数,在python中我们认为hashcode是代表内存地址的,但是在scala中,马丁喜欢对hashcode重写,让集合hashcode元素一致的集合hashcode相等,并不能代表内存值。

 

原文地址:https://www.cnblogs.com/wqbin/p/13154468.html