数组-定长数组(申明泛型)
第一种形式定义数组
阐明

这里的数组等同于 Java 中的数组,大数据培训中括号的类型就是数组的类型 val arr1 = new ArrayInt

//赋值,汇合元素采纳小括号拜访

arr1(1) =7

代码演示

package com.ldc

object ArrayDemo01 {

def main(args: Array[String]): Unit = {    //阐明    // 1. 创立了一个 Array 对象,    // 2. [Int] 示意泛型,即该数组中,只能寄存 Int    // 3. [Any] 示意 该数组能够寄存任意类型    // 4. 在没有赋值状况下,各个元素的值 0    // 5.  arr01(3) = 10 示意批改 第 4 个元素的值    val arr01 = new Array[Int](4) //底层 int[] arr01 = new int[4]    println(arr01.length) // 4    println("arr01(0)=" + arr01(0)) // 0    // 数据的遍历    for (i <- arr01) {        println(i)    }    println("--------------------")    arr01(3) = 10    for (i <- arr01) {        println(i)    }}

}

第二种形式定义数组
阐明

在定义数组时,间接赋值 //应用 apply 办法创立数组对象 val arr1 = Array(1, 2)

代码演示

package com.ldc

object ArrayDemo02 {

def main(args: Array[String]): Unit = {    //阐明    // 1. 应用的是 object Array 的 apply    // 2. 间接初始化数组,这时因为你给了 整数和 "", 这个数组的泛型就 Any    // 3. 遍历形式一样    var arr02 = Array(1, 3, "xx")    arr02(1) = "xx"    for (i <- arr02) {        println(i)    }    //能够应用咱们传统的形式遍历,应用下标的形式遍历    for (index <- 0 until arr02.length) {        printf("arr02[%d]=%s", index, arr02(index) + "\t")    }}

}

数组-变长数组(申明泛型)
阐明

//定义/申明 val arr2 = ArrayBufferInt//追加值/元素 arr2.append(7) //从新赋值 arr2(0) = 7

代码演示

package com.ldc

import scala.collection.mutable.ArrayBuffer

object ArrayBufferDemo01 {

def main(args: Array[String]): Unit = {    //创立 ArrayBuffer    val arr01 = ArrayBuffer[Any](3, 2, 5)    //拜访,查问//通过下标拜访元素    println("arr01(1)=" + arr01(1)) // arr01(1) = 2    // 遍历    for (i <- arr01) {        println(i)    }    println(arr01.length) //3    println("arr01.hash=" + arr01.hashCode())    //批改 [批改值,动静减少]    //应用 append 追加数据 ,append 反对可变参数    //能够了解成 java 的数组的扩容    arr01.append(90.0, 13) // (3,2,5,90.0,13)    println("arr01.hash=" + arr01.hashCode())    println("===================")    arr01(1) = 89 //批改 (3,89,5,90.0,13)    println("--------------------------")    for (i <- arr01) {        println(i)    }    //删除...    // 删除,是依据下标来说    arr01.remove(0) // (89,5,90.0,13)    println("--------删除后的元素遍历---------------")    for (i <- arr01) {        println(i)    }    println("最新的长度=" + arr01.length) // 4}

}

变长数组剖析总结

1) ArrayBuffer 是变长数组,相似 java 的 ArrayList

2) val arr2 = ArrayBufferInt 也是应用的 apply 办法构建对象

3) def append(elems: A*) { appendAll(elems) } 接管的是可变参数.

4) 每 append 一次,arr 在底层会重新分配空间,进行扩容,arr2 的内存地址会发生变化,也就成为新的 ArrayBuffer

定长数组与变长数组的转换
阐明

在开发中,咱们可能应用对定长数组和变长数组,进行转换 arr1.toBuffer //定长数组转可变数组 arr2.toArray //可变数组转定长

注意事项:

arr2.toArray 返回后果才是一个定长数组, arr2 自身没有变动 arr1.toBuffer 返回后果才是一个可变数组, arr1 自身没有

代码演示

package com.ldc

import scala.collection.mutable.ArrayBuffer

object Array22ArrayBuffer {

def main(args: Array[String]): Unit = {    val arr2 = ArrayBuffer[Int]()    // 追加值    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[A1] = {            val result = new mutable.ArrayBuffer[A1](size)            copyToBuffer(result)            result        }    */    //3. newArr 自身没变动    val newArr2 = newArr.toBuffer    newArr2.append(123)    println(newArr2)}

}

多维数组的定义和应用
阐明

//定义 val arr = Array.ofDimDouble//阐明:二维数组中有三个一维数组,每个一维数组中有四个元素 //赋值 arr(1)(1) = 11.

代码演示

package com.ldc

object MultiplyArray {

def main(args: Array[String]): Unit = {    //创立    val arr = Array.ofDim[Int](3, 4)    //遍历    for (item <- arr) { //取出二维数组的各个元素(一维数组)        for (item2 <- item) { // 元素(一维数组) 遍历            print(item2 + "\t")        }        println()    }    //指定取出    println(arr(1)(1)) // 0    //批改值    arr(1)(1) = 100    //遍历    println("=====================")    for (item <- arr) { //取出二维数组的各个元素(一维数组)        for (item2 <- item) { // 元素(一维数组) 遍历            print(item2 + "\t")        }        println()    }    //应用传统的下标的形式来进行遍历    println("===================")    for (i <- 0 to arr.length - 1) { //先对        for (j <- 0 to arr(i).length - 1) {            printf("arr[%d][%d]=%d\t", i, j, arr(i)(j))        }        println()    }}

}

数组-Scala数组与Java的List的互转
Scala数组转Java的List

在我的项目开发中,有时咱们须要将 Scala 数组转成 Java 数组,看上面案例

代码演示

package com.ldc

import scala.collection.mutable.ArrayBuffer

object ArrayBuffer2JavaList {

def main(args: Array[String]): Unit = {    // Scala 汇合和 Java 汇合相互转换    val arr = ArrayBuffer("1", "2", "3")    /*    implicit def bufferAsJavaList[A](b : scala.collection.mutable.Buffer[A]) : java.util.List[A] = {    /compiled code     */    import scala.collection.JavaConversions.bufferAsJavaList    //对象 ProcessBuilder , 因为 这里应用到下面的 bufferAsJavaList    val javaArr = new ProcessBuilder(arr) //为什么能够这样应用?    // 这里 arrList 就是 java 中的List    val arrList = javaArr.command()    println(arrList) //输入 [1, 2, 3]}

}

补充了一个多态(应用trait来实现的参数多态)的知识点

trait MyTrait01 {}

class A extends MyTrait01 {}

object B {

def test(m: MyTrait01): Unit = {    println("b ok..")}

}

//明确一个知识点

// 当一个类继承了一个 trait

// 那么该类的实例,就能够传递给这个 trait 援用

val a01 = new A

B.test(a01)

Java的List转Scala数组(mutable.Buffer)
代码如下

//java 的 List 转成 scala 的 ArrayBuffer

//阐明

//1. asScalaBuffer 是一个隐式函数

/*

implicit def asScalaBufferA : scala.collection.mutable.Buffer[A] = { /* compiled

code */ }

*/

import scala.collection.JavaConversions.asScalaBuffer

import scala.collection.mutable

// java.util.List ==> Buffer

val scalaArr: mutable.Buffer[String] = arrList

scalaArr.append("jack")

scalaArr.append("tom")

scalaArr.remove(0)

println(scalaArr) // (2,3,jack,tom)