数组

提示:推荐使用不可变数组

 

一、不可变数组

1、第一种方式定义数组

     定义:val arr1 = new Array[int](10)

     (1)new是关键字

     (2)[int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定Any

     (3)(10)表示数组的大小,确定后就不可以变化

创建:

    //1、创建数组
    val arr: Array[Int] = new Array[Int](10)

    //另一种创建方式
    val arr1 = Array(1, 2, 3, 4, 5)

2、赋值,查询:

    //赋值
    arr(0) = 1
    arr(3) = 33

    //2、查询数据
    println(arr(0))
    println(arr(3))

 

3、数组的遍历

(1)不同的for循环, until是不包含 arr.length 的意思

          用indices遍历

//(1)不同的for循环, until是不包含 arr.length 的意思
    for (i <- 0 until arr1.length) {
      println(arr1(i))
    }
    println("----------------")
    //用indices遍历
    for (i <- arr1.indices) println(arr1(i))

 

 

(2)增强for循环,直接遍历所有元素

for (elem <- arr2) println(elem)

 

(3)迭代器

val iter = arr2.iterator
    while (iter.hasNext)
      println(iter.next())

 

(4)调用foreach方法

 arr2.foreach(println)

 

(5)用mkstring连接打印

println(arr2.mkString("--"))

 

 

4、不可变数组添加元素,原数组不变,会创建一个新数组

    //在后添加
    val newArr2 = arr2.:+(11)
    println(arr2.mkString(", "))
    println(newArr2.mkString(", "))

    //在前添加
    val newArr3 = arr2.+:(22)
    println(newArr3.mkString(", "))

简化和连续添加

    //
    val newArr4 = arr2 :+ 33 :+ 55
    //
    val newArr5 = 66 +: 44 +: newArr4 :+ 77 :+ 88
    println(newArr5.mkString("-"))

 

 

 

二、可变数组

 1、创建数组

    //1、创建一个可变数组
    val arr = new ArrayBuffer[Int]()
    //另一种
    val arr1 = ArrayBuffer(1, 2, 3, 4, 5)

 

2、添加数组

    //2、添加元素
    val newArr = arr :+ 11
    println(arr)
    println(newArr)
    println(arr == newArr)
    println("----------")

    //原数组改变,在后面添加数据
    val newArr2 = arr += 22
    println(arr)
    println(newArr2)
    //他们指向的同一个引用,所以改变newArr也改变arr
    //true
    println(newArr2 == arr)
    newArr2 += 33
    println(arr)
    println("-------")

    //在前加
    44 +=: arr
    println(arr)
    println(newArr2)

 

 

 

添加的简便方法:

    //调用方法添加,在后添加
    arr.append(55, 66, 77)
    
//在前添加 arr.prepend(88, 99)
//任意位置添加, 在一索引位置添加12,13 arr.insert(1, 12, 13)
//在任意位置添加一个数组 arr.insertAll(1, newArr)
//在后添加一个数组 arr.appendAll(newArr2)
//在前添加一个数组 arr.prependAll(newArr2)

 

3、删除元素

    //4、删除元素
    arr.remove(3)
    println(arr)
    //从索引1到10删除
    arr.remove(1, 35)
    println(arr)

    //删除指定的数
    arr -= 88
    println(arr)

 

 

三、可变转换为不可变数组

    //5、可变数组转换为不可变数组
    val arr2 = ArrayBuffer(11, 22, 33)
    //转换为不可变数组的方法
    val newArr3 = arr2.toArray
    println(newArr3.mkString(", "))
    println(arr2)

 

 

四、不可变转换为可变

    //6、不可变转换为可变数组
    val buffer = newArr3.toBuffer
    println(buffer)

 

 

五、多维数组

1、创建二维数组,2行3列

val array = Array.ofDim[Int](2, 3)

 

2、访问元素

(1)赋值

    array(0)(2) = 1
    array(1)(1) = 2

(2)遍历

for (i <- 0 until array.length; j <- 0 until array(i).length){
      println(array(i)(j))
    }
    println("------------")

//用indices
for (i <- array.indices; j <- array(i).indices){ print(array(i)(j) + "\t") if (j == array(i).length-1) println() }

(3)用foreach遍历

    array.foreach(line => line.foreach(println))
    //简化,如果是三维的array.foreach(_.foreach(_.foreach(println))),同理可推更高维的数组遍历
    array.foreach(_.foreach(println))

 

posted @ 2022-05-16 15:20  小王同学学编程  阅读(15)  评论(0)    收藏  举报
levels of contents