• scala 数据结构(二):数组


    1 数组-定长数组(声明泛型)

    第一种方式定义数组

    这里的数组等同于Java中的数组,中括号的类型就是数组的类型

    val arr1 = new Array[Int](10) //赋值,集合元素采用小括号访问 arr1(1) = 7

    val arr01 = new Array[Int](4)
    println(arr01.length)
    
    println("arr01(0)=" + arr01(0))
    for (i <- arr01) {
    println(i)
    }
    println("--------------------")
    arr01(3) = 10
    for (i <- arr01) {
    println(i)
    }

    第二种方式定义数组

    在定义数组时,直接赋值

    //使用apply方法创建数组对象

    val arr1 = Array(1, 2)

    2 数组-变长数组(声明泛型)

    基本使用和应用案例

    //定义/声明
    val arr2 = ArrayBuffer[Int]()
    //追加值/元素
    arr2.append(7)
    //重新赋值
    arr2(0) = 7
    //学习集合的流程(创建,查询,修改,删除)
    val arr01 = ArrayBuffer[Any](3, 2, 5)
    
    println("arr01(1)=" + arr01(1))
    for (i <- arr01) {
    println(i)
    }
    println(arr01.length) //?
    println("arr01.hash=" + arr01.hashCode())
    arr01.append(90.0,13)
    println("arr01.hash=" + arr01.hashCode())
    
    arr01(1) = 89 //修改
    println("--------------------------")
    for (i <- arr01) {
    println(i)
    }
    
    //删除
    arr01.remove(0)
    println("--------------------------")
    for (i <- arr01) {
    println(i)
    }
    println("最新的长度=" + arr01.length)

    变长数组分析小结

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

    2)val arr2 = ArrayBuffer[Int]() 也是使用的apply方法构建对象

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

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

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

    arr1.toBuffer //定长数组转可变数组

    arr2.toArray //可变数组转定长数组

    1)arr2.toArray 返回结果才是一个定长数组, arr2本身没有变化

    2)arr1.toBuffer返回结果才是一个可变数组, arr1本身没有变化

    val arr2 = ArrayBuffer[Int]()
    // 追加值
    arr2.append(1, 2, 3)
    println(arr2)
    
    val newArr = arr2.toArray;
    println(newArr)
    
    val newArr2 = newArr.toBuffer
    newArr2.append(123)
    println(newArr2)

    3 数组-多维数组

    多维数组的定义和使用

    说明

    //定义
    val arr = Array.ofDim[Double](3,4)
    //说明:二维数组中有三个一维数组,每个一维数组中有四个元素
    
    //赋值
    arr(1)(1) = 11.11
    val array1 = Array.ofDim[Int](3, 4)
    array1(1)(1) = 9
    for (item <- array1) {
    for (item2 <- item) {
    print(item2 + "	")
    }
    println()
    }
    println("===================")
    for (i <- 0 to array1.length - 1) {
    for (j <- 0 to array1(i).length - 1) {
    printf("arr[%d][%d]=%d	", i, j, array1(i)(j))
    }
    println()
    }

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

    Scala数组转Java的List

    // Scala集合和Java集合互相转换
    val arr = ArrayBuffer("1", "2", "3")
    import scala.collection.JavaConversions.bufferAsJavaList
    val javaArr = new ProcessBuilder(arr) //为什么可以这样使用?
    val arrList = javaArr.command()
    println(arrList) //输出 [1, 2, 3]
    补充:
    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数组,看下面案例:

    import scala.collection.JavaConversions.asScalaBuffer
    import scala.collection.mutable
    // java.util.List ==> Buffer
    val scalaArr: mutable.Buffer[String] = arrList
    scalaArr.append("jack")
    println(scalaArr)
  • 相关阅读:
    基于Windows Mobile 5.0的GPS应用程序开发
    iis6应用程序池被自动禁用问题 应用程序池'DefaultAppPool' 被自动禁用
    Axapta物流模块深度历险(八)
    AX的报表服务器(一)
    AX的企业门户(一)
    SQL Server2005 Reporting Services 管理站点
    SQL Server2005 Reporting Services的卸载
    耐心的解决问题
    危险操作符
    慢慢的坚持啊
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13263740.html
Copyright © 2020-2023  润新知