目录

数组  重点掌握

定长数组

变长数组

遍历数组

数组常用算法


数组  重点掌握

scala中数组的概念是和Java类似,可以用数组来存放一组数据。scala中,有两种数组,一种是定长数组,另一种是变长数组

定长数组

  • 定长数组指的是数组的长度不允许改变
  • 数组的元素可以改变

java中数组是根据类型来定义的比如 int[] String[]

在Scala中, 数组也是一个类, Array类, 存放的内容通过泛型来定义, 类似java中List的定义

语法

// 通过指定长度定义数组
val/var 变量名 = new Array[元素类型](数组长度)

// 用元素直接初始化数组
val/var 变量名 = Array(元素1, 元素2, 元素3...)

[!NOTE]

  • 在scala中,数组的泛型使用[]来指定(java <>)
  • 使用()来获取元素(java [])

这两点要注意, 不要混淆了

示例一

定义一个长度为100的整型数组

设置第1个元素为110

打印第1个元素

参考代码

scala> val a = new Array[Int](100)
a: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)scala> a(0) = 110scala> println(a(0))
110

示例二

定义一个包含以下元素的数组

  1. , "scala", "python"

获取数组长度

参考代码

// 定义包含jave、scala、python三个元素的数组
scala> val a = Array("java", "scala", "python")
a: Array[String] = Array(java, scala, python)scala> a.length
res17: Int = 3

为什么带初值的就不用new呢.

这里会用到一个apply方法, 我们后面会详细说.

我们现在只需要知道, 直接Array(1, 2, 3)来创建数组, 其实就是自动调用了Array类中的apply方法

apply方法做的事情就是, new array(3) 然后把3个元素放进去, 也就是这些工作自动帮我们做了.

大家先记住结论, 先会用, 后面我们学到面向对象的时候就会明白为什么啦

变长数组

变长数组指的是数组的长度是可变的,可以往数组中添加、删除元素

定义变长数组

创建变长数组,需要提前导入ArrayBuffer类import scala.collection.mutable.ArrayBuffer

语法

  • 创建空的ArrayBuffer变长数组,语法结构:

/var a = ArrayBuffer[元素类型]()

  • 创建带有初始元素的ArrayBuffer

/var a = ArrayBuffer(元素1,元素2,元素3....)

示例一

定义一个长度为0的整型变长数组

参考代码

val a = ArrayBuffer[Int]()为什么长度为0的就必须加泛型呢? 如果不加就是下面这样scala> val a1 = ArrayBuffer()
a1: scala.collection.mutable.ArrayBuffer[Nothing] = ArrayBuffer()因为没有初值来判断泛型, 所以泛型是Nothing同时不要忘记省略(), 不要用方法调用的概念认为不带参数就可以不写括号了, 这样是不可以的, 如下:scala> val a1 = ArrayBuffer[Int]
<console>:12: error: missing argument list for method apply in class GenericCompanion
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `apply _` or `apply(_)` instead of `apply`.val a1 = ArrayBuffer[Int]

就像前面提过一句的apply方法, 如果不带() 那么就不会调用apply方法, 不调用apply方法, 那么就没有ArrayBuffer的调用.也就是不知道调用谁了.

示例二

定义一个包含以下元素的变长数组

"hadoop", "storm", "spark"

参考代码

scala> val a = ArrayBuffer("hadoop", "storm", "spark")
a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark)

添加/修改/删除元素

  • 使用+=添加元素
  • 使用-=删除元素
  • 使用++=追加一个数组到变长数组

示例

定义一个变长数组,包含以下元素: "hadoop", "spark", "flink"

往该变长数组添加一个"flume"元素

从该变长数组删除"hadoop"元素

再将一个数组,该数组包含"hive", "sqoop"追加到变长数组中

参考代码

// 定义变长数组
scala> val a = ArrayBuffer("hadoop", "spark", "flink")
a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, spark, flink)// 追加一个元素
scala> a += "flume"
res10: a.type = ArrayBuffer(hadoop, spark, flink, flume)// 删除一个元素
scala> a -= "hadoop"
res11: a.type = ArrayBuffer(spark, flink, flume)// 追加一个数组
scala> a ++= Array("hive", "sqoop")
res12: a.type = ArrayBuffer(spark, flink, flume, hive, sqoop)

遍历数组

可以使用以下两种方式来遍历数组:

  • 使用for表达式直接遍历数组中的元素
  • 使用索引遍历数组中的元素

示例一

定义一个数组,包含以下元素1,2,3,4,5

使用for表达式直接遍历,并打印数组的元素

参考代码

scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)scala> for(i<-a) println(i)
1
2
3
4
5

示例二

定义一个数组,包含以下元素1,2,3,4,5

使用for表达式基于索引下标遍历,并打印数组的元素

参考代码

scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)scala> for(i <- 0 to a.length - 1) println(a(i))
1
2
3
4
5scala> for(i <- 0 until a.length) println(a(i))
1
2
3
4
5

[!NOTE]

0 until n——生成一系列的数字,包含0,不包含n

0 to n ——包含0,也包含n

数组常用算法

scala中的数组封装了一些常用的计算操作,将来在对数据处理的时候,不需要我们自己再重新实现。以下为常用的几个算法:

  • 求和——sum方法
  • 求最大值——max方法
  • 求最小值——min方法
  • 排序——sorted方法

求和

数组中的sum方法可以将所有的元素进行累加,然后得到结果

示例

定义一个数组,包含以下几个元素(1,2,3,4)

请计算该数组的和

参考代码

scala> val a = Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)scala> a.sum
res49: Int = 10

最大值

数组中的max方法,可以获取到数组中的最大的那个元素值

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

获取数组的最大值

参考代码

scala> val a = Array(4,1,2,4,10)
a: Array[Int] = Array(4, 1, 2, 4, 10)scala> a.max
res50: Int = 10

最小值

数组的min方法,可以获取到数组中最小的那个元素值

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

获取数组的最小值

参考代码

scala> val a = Array(4,1,2,4,10)
a: Array[Int] = Array(4, 1, 2, 4, 10)scala> a.min
res51: Int = 1

排序

数组的sorted方法,可以对数组进行升序排序。而reverse方法,可以将数组进行反转,从而实现降序排序

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

对数组进行升序排序、降序排序

参考代码

// 升序排序
scala> a.sorted
res53: Array[Int] = Array(1, 2, 4, 4, 10)// 降序
scala> a.sorted.reverse
res56: Array[Int] = Array(10, 4, 4, 2, 1)

2021年大数据常用语言Scala(十四):基础语法学习 数组  重点掌握相关推荐

  1. 2021年大数据常用语言Scala(四):基础语法学习 声明变量

    目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量 惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量.那scala语言如何定义变量呢? 语法格 ...

  2. 2021年大数据常用语言Scala(二十):函数式编程 介绍

    目录 函数式编程 介绍 函数式编程的意义在哪? 函数式编程 介绍 我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程.下面的这些操作是学习的重点. 现在我们将会逐渐接触函数式编程的方 ...

  3. 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)

    目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...

  4. 2021年大数据常用语言Scala(一):Scala简介

    目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...

  5. 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握

    目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的.也是最常用的数据结构.List具备以下性质: 可以保存重复的值 有先后顺序 ...

  6. 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数

    目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...

  7. 2021年大数据常用语言Scala(三十六):scala高级用法 泛型

    目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...

  8. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  9. 2021年大数据常用语言Scala(二十六):函数式编程 分组 groupBy

    目录 分组  groupBy 定义 示例 分组  groupBy 我们如果要将数据按照分组来进行统计分析,就需要使用到分组方法 等同于SQL中的 group by的概念, 就是给数据按照指定的列进行分 ...

最新文章

  1. 从简单到高并发服务器(一)
  2. html文本可选择,如何用javascript选择html文本?
  3. 2. 动态分配字符串
  4. MySQL存储引擎之InnoDB
  5. tomcat端口冲突解决 Address already in use: JVM_Bind :8080
  6. [C++STL]string容器用法介绍
  7. 2013_hangzhou_online
  8. 冠军方案解读,ICPR 2020 大规模商品图像识别挑战赛
  9. 嘉年华回顾丨Eygle带你领略数据库技术和生态的发展演进
  10. ROS学习笔记四:理解ROS节点
  11. jq js json 转字符串_JSON字符串转换成JSON对象的JS代码
  12. SpringMvc @PathVariable 工作原理
  13. Win7系统下解决VB6.0鼠标滚轮支持
  14. 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
  15. Echart自适应图表大小和字体大小
  16. 【产业互联网周报】硅谷多家IT大厂组成现代计算联盟,提供企业云上服务;台积电新封装技术2023年投产...
  17. 104道 CSS 面试题,助你查漏补缺(上)
  18. H5 VUE实现手机签名功能
  19. 注意的分类和规律以及生理机制
  20. “网站处于联机状态,但未对连接尝试做出响应解决方案”解决方案

热门文章

  1. JPA不同包下同类名查询出错
  2. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
  3. 2022-2028年中国钢筘行业市场研究及前瞻分析报告
  4. 2022-2028中国空中互联网系统市场现状及未来发展趋势报告
  5. hadoop,spark,scala,flink 大数据分布式系统汇总
  6. Python 正则表达式各种特殊符号 重点
  7. CodeGen处理Synergy方法目录
  8. Python脚本语言写法
  9. Django celery6.4
  10. 用python创建一个目录