scala语言量大特性:面向对象+函数式编程

Scala的类型

  val指的是引用不可变,而不是值。

值类型

    • Byte
    • Char
    • Short
    • Int
    • Long
    • Float
    • Double

引用类型

    • String
    • 自定义类型

条件表达式

val y=if(x>1) 1 else if(x=1) 1.2 else "1"

可以返回不同类型,这是java 做不到的

val a= if(x<1) 1

最后a= AnyVal=(),在scala中所有类型的基类伟AnyVal,类比java中的Object对象

循环

  1 to 10 等同于1.to(10)  返回一个1-10的Range对象

  for(i <-1 to 10){

    println(i)

  }

  循环访问一个数组

  val arr = Array("java","scala","C++")

  for(i <- arr){

    println(i)

  }

  

  循环嵌套

  for(i <- 1 to 3;j <- 1 to 3 if(i!=j) ) println(i*10+j)  输出结果是除了不满足条件的i j不输出之外其余的都会输出,这是不同于java的地方,java中如果循环中某一次条件不满足,那么就会直接跳出循环

  

  val res= for(i<-1 until 10) yield i

  res组中结果为:Vector(1,2,3,4,5,6,7,8,9)

需要注意的是所有的数组类型、映射元组等两个包里面都有。一种是immutable一种是mutable,前者一旦初始化不能在变,后者可以变

数组

定长数组


val arr1 =new Array[Int](3)或者val arr1 = Array(1,1,1)

初始化之后arr1:Array[String] = Array(0,0,0)

println (arr)将打印出引用,而不知数组的内容,如果要打印出数组的内容可以println(arr.toBuffer)

变长数组

val arr3=ArrayBuffer[Int]()

数组追加定长元素:arr3 +=(2,3,4)

数组追加变长数组:arr3 ++= ArrayBuffer(1,2,3)

数组中插入数据:arr3.insert(0,1,2,3),在第零个元素前面插入1,2,3

数组删除元素:arr3.remove(2,3),在下标为2的元素开始删除,删除三个元素;

映射

  实际上就是一个map,常见的声明方式有下面几种:

  val map1 =Map("scala"->1,"java"->2, "python"->3)

  val map2 =Map(("scala",1),("java",2),("python",3))

  获取Map的值:map1("scala")

  修改Map的值:map1(“scala”)=6  (前提是map被声明为可变的类型,也就是上面说的mutable)

  获取map的值:map1.getOrElse(“C”,-1),如果没有的话,就获取到一个默认值。

元组

  元组就是用一组值,可以有不同的类型,而且可以嵌套,元组的下标是从1开始的,这是和数组不同之处。

  val t=("scala",100L,3.14, ("spark",1))

  读取: t._1        scala

      t._4._1   spark

二元组数组转换成map

val t = Array({"scala",1},{"spring",2},{"java",3})

val maparr = t.toMap()

集合三大类 sequence、set、map

不可变list

  val list1 = List(1,2,3)

  前追加:val list2 = 0 ::list1

     val list3 = list1.::(0)

        val list4 = 0+:list1

     val list5 = list1.+:(0)

  后追加:val list6 = list1:+4

  合并:val list7 = List(5,6,7)

       val list8 = list1 ++ list7

       val list9 = list1:::list7

       val list10 = list1++:list7

可变list

  val list1=ListBuffer(1,2,3)

  追加:list1+=4

       list1.append(5)

     val list2 = ListBuffer(6,7,8)

      list1++=list2

不可变Set

  val set1 =new Hashset[Int]()

  val set2 = set1 +1

  val set3 = set2++ Set(2,3,4)

可变Set

  val set1 = new HashSet[Int]()

  追加:set1+=1

    set1.add(3)

    set1 ++=Set(4,5,6)

  删除:

    set1-=1

    set1.remove(2)

不可变Map

  val map1 = new HashMap[String,Int]()

  添加元素

    map1("scala") = 1

    map1+=(("java",2))

    map1.put("python",3)

  删除元素:

    map1-=java

    map1.remove(python)

  

  

Scala---初探的更多相关文章

  1. Spark小课堂Week5 Scala初探

    Spark小课堂Week5 Scala初探 Scala是java威力加强版. 对Java的改进 这里会结合StreamingContext.scala这个代码说明下对Java的改进方面. 方便测试方式 ...

  2. Scala初探:新潮的函数式面向对象语言

    Scala的基本概念 先讲讲Scala里头几个概念Classes, Traits, Objects and Packages. Class和Java中的很像,只不过Scala中Class不能有stat ...

  3. Scalding初探之一:基于Scala的Hadoop利器

    把你从写繁琐的Map-reduce Job中解放出来,写分布式跟写本地程序没两样,Scala真真代表着先进生产力的方向啊. 好的,今天开始直播基于Scala的Scalding啦,循序渐进地看以下页面: ...

  4. scala spark 机器学习初探

    Transformer: 是一个抽象类包含特征转换器, 和最终的学习模型, 需要实现transformer方法 通常transformer为一个RDD增加若干列, 最终转化成另一个RDD, 1. 特征 ...

  5. geotrellis使用(五)使用scala操作Accumulo

    要想搞明白Geotrellis的数据处理情况,首先要弄清楚数据的存放,Geotrellis将数据存放在Accumulo中. Accumulo是一个分布式的Key Value型NOSQL数据库,官网为( ...

  6. geotrellis使用(六)Scala并发(并行)编程

    本文主要讲解Scala的并发(并行)编程,那么为什么题目概称geotrellis使用(六)呢,主要因为本系列讲解如何使用Geotrellis,具体前几篇博文已经介绍过了.我觉得干任何一件事情基础很重要 ...

  7. 日语编程语言"抚子" - 第三版特色初探

    原址: https://zhuanlan.zhihu.com/p/30800689 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, ...

  8. 2017-11-06 日语编程语言"抚子" - 第三版特色初探

    "中文编程"知乎专栏原链 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, 相信对中文编程语言的设计和实践有借鉴意 ...

  9. 几款开源的ETL工具及ELT初探

    ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL 是构建数据仓 ...

  10. 沉淀再出发:kafka初探

    沉淀再出发:kafka初探 一.前言 从我们接触大数据开始,可能绕在耳边的词汇里面出现的次数越来越多的就包括kfaka了.kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息, ...

随机推荐

  1. 顺时针打印矩阵(剑指offer-19)

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  2. Django---进阶4

    目录 CBV源码剖析 模版语法传值 过滤器(过滤器只能最多有两个参数) 标签 自定义过滤器.标签.inclusion_tag 模版的继承 模版的导入 作业 CBV源码剖析 # 你自己不要修改源码 除了 ...

  3. java NIO 原理解析之学习笔记

    关键抽象 1.Buffer缓冲区 NIO数据传递模型,是一个连续的内存区域.所有数据传递均通过buffer类处理:NIO提供了字符串.整形.字节.堆等多种缓冲区. 2.Channel(通道) NIO把 ...

  4. es6 模块与commonJS的区别

    在刚接触模块化开发的阶段,我总是容易将export.import.require等语法给弄混,今天索性记个笔记,将ES6 模块知识点理清楚 未接触ES6 模块时,模块开发方案常见的有CommonJS. ...

  5. python 设计模式专题(一):目录篇

    一.创建型设计模式 1.工厂模式 2.建造者模式 3.原型模式 二.结构型设计模式(组合) 1.适配器模式 2.装饰器模式 3.外观模式 4.单例模式 5.mvc模式 6.代理模式 三.行为型设计模式 ...

  6. 机器学习实战基础(十七):sklearn中的数据预处理和特征工程(十)特征选择 之 Embedded嵌入法

    Embedded嵌入法 嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行.在使用嵌入法时,我们先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大 ...

  7. Linux01 /Linux初识

    Linux01 /Linux初识 目录 Linux01 /Linux初识 1. 服务器 2. Linux系统介绍 3. linux简单介绍 4. VMware与Centos系统安装 5. 各个连接协议 ...

  8. 前端09 /jQuery标签操作、事件、补充

    前端09 /jQuery标签操作.事件.补充 目录 前端09 /jQuery标签操作.事件.补充 1.标签内文本操作 1.1 html标签元素中的所有内容 1.2 text 标签元素的文本内容 2.文 ...

  9. ShaderLab-12chapter屏幕后处理、图片置灰效果

    屏幕后处理的原理 使用特定的材质去渲染对应相机近裁剪平面的4边形面片(刚好填充屏幕) 亮度-Luminance公式 --扩展置灰实现 luminance = 0.2125 * Red + 0.7154 ...

  10. educoder SML程序设计题线下编译环境搭建

    背景 最近<串并行数据结构与算法设计>的老师在educoder上布置了一些SML程序设计题,虽然网站上有在线编译功能,但还是在线下编译调试方便,特记录编译环境过程如下(我用的GVIM,但N ...