/**

* 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说:

* 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的更多相关文章

  1. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  2. Scala入门 【1】

    Scala入门 [1] 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 基础 val定义的为常量,var为变量 val name:Type = ***,变量名后加冒号 ...

  3. Scala 入门详解

    Scala 入门详解 基本语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.类,对象,方法,实例变 ...

  4. idea创建Scala入门HelloWorld

    Scala开发环境的搭建 首先到Scala官网下载Scala网址为 https://www.scala-lang.org/download/ 找到下图所示位置:选择相对应的版本的Scala进行下载,这 ...

  5. Scala入门到精通

    原文出自于: http://my.csdn.net/lovehuangjiaju 感谢! 也感谢,http://m.blog.csdn.net/article/details?id=52233484 ...

  6. scala 入门(2)--数组相关操作

    scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...

  7. Scala入门系列(四):Map & Tuple

    Map 创建Map // 创建一个不可变的Map scala> val ages = Map("Leo" -> 30, "Sparks" -> ...

  8. 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/ ...

  9. scala 入门Eclipse环境搭建

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld IDE选择并下载: scala for eclipse 下载: http://scala-ide.org/downloa ...

随机推荐

  1. SQL优化技巧--远程连接对象引起的CTE性能问题

    背景 最近SSIS的开发过程中遇到几个问题.其中使用CTE时,遇到一个远程连接对象,结果导致严重的性能问题,为了应急我就修改了代码. 之前我写了一篇介绍CTE的随笔包含了CTE的用法等: http:/ ...

  2. InnoDB的WAL方式学习

    之前写过一篇博文,<不好的MySQL过程编写习惯>(http://www.cnblogs.com/wingsless/p/5041838.html).这篇博文里强调了不要循环的提交事务,尽 ...

  3. Python标准库01 正则表达式(re包)

    python正则表达式基础 简单介绍 正则表达式并不是python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...

  4. android oncreate获取宽高度

    gridView = (GridView) getView().findViewById(R.id.gridView_musicbook); gridView.getViewTreeObserver( ...

  5. 在win10中创建开机自动登陆的网络驱动器

    前提环境: win10系统电脑一台. centos系统电脑一台,在该系统中安装samba,并配置共享. 要解决的问题: 在win10做了网络映射,将centos共享的文件夹设置成本地硬盘.在映射时,也 ...

  6. aircack-ng抓握手包

    1.关闭影响进程 airmon-ng check kill 将要进入监听模式的无线网卡断开它已连接的AP 2.查看无线网卡的名字 ifconfig ,例如 wlan0 3.进入监听模式: airmon ...

  7. KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  8. plain framework 1 版本更新 1.0.2 增加打包插件

    由于个别因素,该框架的文档没有及时的更新到博客上,但是离线的文档已经完成.本次更新对框架来说显得比较重要,因为在文档的编写过程中经过再次的阅读代码修复了不少错误,最主要的是统一了整个框架的标准风格.对 ...

  9. HDU3535AreYouBusy[混合背包 分组背包]

    AreYouBusy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. 文件上传&文件下载

    一.单个文件上传 文件上传需要两个jar包: 首先制作一个简单的页面,用于实现文件上传 <h1>单个文件上传</h1> <s:form action="uplo ...