2021年大数据常用语言Scala(十四):基础语法学习 数组 重点掌握
目录
数组 重点掌握
定长数组
变长数组
遍历数组
数组常用算法
数组 重点掌握
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
示例二
定义一个包含以下元素的数组
- , "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(十四):基础语法学习 数组 重点掌握相关推荐
- 2021年大数据常用语言Scala(四):基础语法学习 声明变量
目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量 惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量.那scala语言如何定义变量呢? 语法格 ...
- 2021年大数据常用语言Scala(二十):函数式编程 介绍
目录 函数式编程 介绍 函数式编程的意义在哪? 函数式编程 介绍 我们将来使用Spark/Flink的大量业务代码都会使用到函数式编程.下面的这些操作是学习的重点. 现在我们将会逐渐接触函数式编程的方 ...
- 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)
目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...
- 2021年大数据常用语言Scala(一):Scala简介
目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...
- 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握
目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的.也是最常用的数据结构.List具备以下性质: 可以保存重复的值 有先后顺序 ...
- 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...
- 2021年大数据常用语言Scala(三十六):scala高级用法 泛型
目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...
- 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类
目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...
- 2021年大数据常用语言Scala(二十六):函数式编程 分组 groupBy
目录 分组 groupBy 定义 示例 分组 groupBy 我们如果要将数据按照分组来进行统计分析,就需要使用到分组方法 等同于SQL中的 group by的概念, 就是给数据按照指定的列进行分 ...
最新文章
- 从简单到高并发服务器(一)
- html文本可选择,如何用javascript选择html文本?
- 2. 动态分配字符串
- MySQL存储引擎之InnoDB
- tomcat端口冲突解决 Address already in use: JVM_Bind :8080
- [C++STL]string容器用法介绍
- 2013_hangzhou_online
- 冠军方案解读,ICPR 2020 大规模商品图像识别挑战赛
- 嘉年华回顾丨Eygle带你领略数据库技术和生态的发展演进
- ROS学习笔记四:理解ROS节点
- jq js json 转字符串_JSON字符串转换成JSON对象的JS代码
- SpringMvc @PathVariable 工作原理
- Win7系统下解决VB6.0鼠标滚轮支持
- 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
- Echart自适应图表大小和字体大小
- 【产业互联网周报】硅谷多家IT大厂组成现代计算联盟,提供企业云上服务;台积电新封装技术2023年投产...
- 104道 CSS 面试题,助你查漏补缺(上)
- H5 VUE实现手机签名功能
- 注意的分类和规律以及生理机制
- “网站处于联机状态,但未对连接尝试做出响应解决方案”解决方案