zoukankan      html  css  js  c++  java
  • scala学习笔记Array、ArrayBuffer以及遍历数组(7)

    Array

    在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]。

     1 // 数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化
     2 val a = new Array[Int](10)
     3 a(0)
     4 a(0) = 1
     5 val a = new Array[String](10)
     6 
     7 // 可以直接使用Array()创建数组,元素类型自动推断
     8 val a = Array("hello", "world")
     9 a(0) = "hi"
    10 val a = Array("leo", 30)

    ArrayBuffer

    在Scala中,如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使用ArrayBuffer。

     1 // 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类
     2 import scala.collection.mutable.ArrayBuffer
     3 // 使用ArrayBuffer()的方式可以创建一个空的ArrayBuffer
     4 val b = ArrayBuffer[Int]()
     5 // 使用+=操作符,可以添加一个元素,或者多个元素
     6 // 这个语法必须要谨记在心!因为spark源码里大量使用了这种集合操作语法!
     7 b += 1
     8 b += (2, 3, 4, 5)
     9 // 使用++=操作符,可以添加其他集合中的所有元素
    10 b ++= Array(6, 7, 8, 9, 10)
    11 // 使用trimEnd()函数,可以从尾部截断指定个数的元素
    12 b.trimEnd(5)

    ArrayBuffer

    // 使用insert()函数可以在指定位置插入元素
    // 但是这种操作效率很低,因为需要移动指定位置后的所有元素
    b.insert(5, 6)
    b.insert(6, 7, 8, 9, 10)
    // 使用remove()函数可以移除指定位置的元素
    b.remove(1)
    b.remove(1, 3)
    // Array与ArrayBuffer可以互相进行转换
    b.toArray
    a.toBuffer

    遍历Array和ArrayBuffer

     1 // 使用for循环和until遍历Array / ArrayBuffer
     2 // 使until是RichInt提供的函数
     3 for (i <- 0 until b.length)
     4   println(b(i))
     5 // 跳跃遍历Array / ArrayBuffer
     6 for(i <- 0 until (b.length, 2))
     7   println(b(i))
     8 // 从尾部遍历Array / ArrayBuffer
     9 for(i <- (0 until b.length).reverse)
    10   println(b(i))
    11 // 使用“增强for循环”遍历Array / ArrayBuffer
    12 for (e <- b)
    13   println(e)

    数组常见操作

     1 // 数组元素求和
     2 val a = Array(1, 2, 3, 4, 5)
     3 val sum = a.sum
     4 // 获取数组最大值
     5 val max = a.max
     6 // 对数组进行排序
     7 scala.util.Sorting.quickSort(a)
     8 // 获取数组中所有元素内容
     9 a.mkString
    10 a.mkString(", ")
    11 a.mkString("<", ",", ">")
    12 // toString函数
    13 a.toString
    14 b.toString
  • 相关阅读:
    抖音服务器带宽有多大,才能供上亿人同时刷?今天长见识了。。
    用了很多年的 CMS 垃圾收集器,终于换成了 G1,真香!!
    Spring Boot 项目脚本(启动、停止、重启、状态)
    正排倒排,并不是 MySQL 的排序的全部!
    自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10 倍!
    beego实现多端口监听
    区块链分类
    Hyperledger/Fabric
    register db `default`, default addr for network 'localhost:3306' unknown must have one register DataBase alias named `default`
    go vendor的正确打开方式
  • 原文地址:https://www.cnblogs.com/HeQiangJava/p/6706951.html
Copyright © 2011-2022 走看看