Scala入门之Array
/**
* 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说:
* 1,数据集合:会涉及数据的搜集、存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kafka;
* 2,对数据集合的操作技术:目前全球最火爆的是Spark;
*
* Spark的框架实现语言是Scala,首选的应用程序开发语言也是Scala,所以Scala对集合以及集合操作的支持就至关重要且必须异常强大;
* 一个补充说明是:可能是巧合,Spark中对很多数据的操作的算子和Scala中对集合的操作算子是一样一样的!也就是说你掌握了Scala中
* 的集合的操作,基本上就可以直接去开发Spark代码啦,非常美妙!
*
* 关于Scala中数据的创建与操作:
* 1,最最原始的创建数据的方式是形如val array = new Array[Int](5) ,指定数组的类型是Int且其固定长度是5个元素;
* 2, 对数组元素访问的时候下标的范围在0到length-1的长度,超过length-1的话会出现java.lang.ArrayIndexOutOfBoundsException
* 3, 最常用和经典的创建数组的方式是形如Array[Int](1,2,3,4,5),直接通过Array类名并传入参数的方式来创建数组实例,在背后的实现是调用Array的
* 工厂方法模式apply来构建出数组及数组的内容的;
* 4, 关于Array本身在底层的实现是借助了JVM平台上的Java语言的数组的实现,是不可变的!
* 5, 如果我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,然后使用ArrayBuffer这个可变数组
* 6, 关于ArrayBuffer增加元素默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高!
* 7,当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要。其实,即使是Array,其本身虽然不可变动(元素不可删减),但是我们可以修改Array中每个元素的内容,所以多线程操作的时候
* 还是必须考虑并发写的问题;
* 8,如果想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成,这在大数据中意义重大:
* 第一点:它是在不修改已经有的Array的内容的基础上完成的,非常适合于大数据的处理;
* 第二点:在大数据中处理中,例如Spark中业务操作的核心思想就类似于yield,来通过使用function对每个元素操作获得新的元素构成的新的集合,其实就是新的RDD,例如MapPartitionsRDD
* 9, 集合的操作往往可以通过丰富的操作算子,例如filter来过滤需要条件的元素,例如map来进行每一个元素的加工;
*/
package com.dtspark.scala.basics
object HelloArrayOps {
def main(args: Array[String]): Unit = {
// val array = new Array[Int](5)
val array = Array(1,2,3,4,5) //在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推到的能力,而我们已经传进了当前数组Array的值,所以可以根据值来推导出类型;
// val array = Array.apply(1,2,3,4,5)
array(0) = 10 //数据的索引下标是从0开始的
// array(5) = 1 //数组下标越界,会出现java.lang.ArrayIndexOutOfBoundsException
for(item <- array) println(item)
val names = Array("Scala","Kafka","Spark")
for(item <- names) println(item)
import scala.collection.mutable.ArrayBuffer
val arrayBuffer = ArrayBuffer[Int]()
arrayBuffer += 1
arrayBuffer += 2
arrayBuffer += 3
arrayBuffer += (4,5,6,7,8,9,10)
arrayBuffer ++= Array(1,2,3)
arrayBuffer.insert(arrayBuffer.length - 1, 100,1000)
arrayBuffer.remove(arrayBuffer.length -2)
arrayBuffer.toArray //当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要。
for(item <- arrayBuffer) println(item)
for(i <- 0 until array.length) print(array(i) + " ")
println
for(i <- 0 until (array.length, 2)) print(array(i) + " ")
println
for(i <- (0 until array.length).reverse) print(array(i) + " ")
println
println("Sum = " + array.sum)
println("Max = " + array.max)
scala.util.Sorting.quickSort(array) //对数组进行升序排序,内容变成了2,3,4,5,10
println("quickSort = " + array.mkString(","))
println(array.mkString("*****", ",", "*****"))
val arrayAddedOne = for(item <- array) yield item + 1
println(arrayAddedOne.mkString(" "))
val arrayEven = for(item <- array if item % 2 == 0) yield item
println(arrayEven.mkString(","))
println(array.filter { x => x % 2 == 0}.mkString(" "))
println(array.filter { _ % 2 == 0}.mkString(" "))
println(array.filter { _ % 2 == 0}.map { _ * 10 }.mkString(" "))
}
}
Scala入门之Array的更多相关文章
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- Scala入门 【1】
Scala入门 [1] 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 基础 val定义的为常量,var为变量 val name:Type = ***,变量名后加冒号 ...
- Scala 入门详解
Scala 入门详解 基本语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.类,对象,方法,实例变 ...
- idea创建Scala入门HelloWorld
Scala开发环境的搭建 首先到Scala官网下载Scala网址为 https://www.scala-lang.org/download/ 找到下图所示位置:选择相对应的版本的Scala进行下载,这 ...
- Scala入门到精通
原文出自于: http://my.csdn.net/lovehuangjiaju 感谢! 也感谢,http://m.blog.csdn.net/article/details?id=52233484 ...
- scala 入门(2)--数组相关操作
scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...
- Scala入门系列(四):Map & Tuple
Map 创建Map // 创建一个不可变的Map scala> val ages = Map("Leo" -> 30, "Sparks" -> ...
- Scala入门(1)Linux下Scala(2.12.1)安装
Scala入门(1)Linux下Scala(2.12.1)安装 一.文件准备 1.1 文件名称 scala-2.12.1.tgz 1.2 下载地址 http://www.scala-lang.org/ ...
- scala 入门Eclipse环境搭建
scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld IDE选择并下载: scala for eclipse 下载: http://scala-ide.org/downloa ...
随机推荐
- mysql-5 数据检索(3)
计算字段 如果想在一个字段中既显示公司的名称,又显示公司的地址,但是这两个信息一般包含在不同的表列中 城市.州和邮政编码存储在不同的列中,但是邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来 ...
- 获取session、request、parmeter的方法
package com.hanqi.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public ...
- 按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
int[]x=new int [50]; char[][]y=new char[10][10]; int j=1,w=0; for(int i=0;i<50;i++) { x[i]=j; j+= ...
- sql server 警报管理,实时监听数据库动向,运筹帷幄之中
工作这么多年了,无论是身边的同学还是同事,发现只要搞程序员的都有一个通病---懒.懒到谁都不愿意加班,尤其是"义务"加班.即使大家都不愿意加班,但是很多时候项目赶着上线或者上线之后 ...
- CSS实现自定义手型气泡提示
实现自定义的手型气泡提示 <html> <head> <meta charset="utf-8"> <title></titl ...
- 烂泥:CentOS6.5挂载windows共享文件夹
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 由于工作需要,需要把本机的文件夹共享出去,然后让CentOS服务器临时使用下. 服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使 ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- 【温故而知新-Javascript】使用地理定位
地理定位(Geolocation)API让我们可以获取用户当前地理位置的信息(或者至少是正在运行浏览器的系统的位置).它不是HTML5规范的一部分,但经常被归组到与HTML5相关的新功能中. 1. 使 ...
- hdu3065 病毒侵袭持续中
题目地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3065 题目: 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java ...
- 单机搭建Android开发环境(五)
前文介绍了Android系统开发环境的搭建,本文将简单介绍Android应用开发环境的搭建. 基于Android Studio搭建应用开发环境,相比使用Eclipse简单得多.Android Stud ...