Scala---初探
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---初探的更多相关文章
- Spark小课堂Week5 Scala初探
Spark小课堂Week5 Scala初探 Scala是java威力加强版. 对Java的改进 这里会结合StreamingContext.scala这个代码说明下对Java的改进方面. 方便测试方式 ...
- Scala初探:新潮的函数式面向对象语言
Scala的基本概念 先讲讲Scala里头几个概念Classes, Traits, Objects and Packages. Class和Java中的很像,只不过Scala中Class不能有stat ...
- Scalding初探之一:基于Scala的Hadoop利器
把你从写繁琐的Map-reduce Job中解放出来,写分布式跟写本地程序没两样,Scala真真代表着先进生产力的方向啊. 好的,今天开始直播基于Scala的Scalding啦,循序渐进地看以下页面: ...
- scala spark 机器学习初探
Transformer: 是一个抽象类包含特征转换器, 和最终的学习模型, 需要实现transformer方法 通常transformer为一个RDD增加若干列, 最终转化成另一个RDD, 1. 特征 ...
- geotrellis使用(五)使用scala操作Accumulo
要想搞明白Geotrellis的数据处理情况,首先要弄清楚数据的存放,Geotrellis将数据存放在Accumulo中. Accumulo是一个分布式的Key Value型NOSQL数据库,官网为( ...
- geotrellis使用(六)Scala并发(并行)编程
本文主要讲解Scala的并发(并行)编程,那么为什么题目概称geotrellis使用(六)呢,主要因为本系列讲解如何使用Geotrellis,具体前几篇博文已经介绍过了.我觉得干任何一件事情基础很重要 ...
- 日语编程语言"抚子" - 第三版特色初探
原址: https://zhuanlan.zhihu.com/p/30800689 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, ...
- 2017-11-06 日语编程语言"抚子" - 第三版特色初探
"中文编程"知乎专栏原链 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, 相信对中文编程语言的设计和实践有借鉴意 ...
- 几款开源的ETL工具及ELT初探
ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL 是构建数据仓 ...
- 沉淀再出发:kafka初探
沉淀再出发:kafka初探 一.前言 从我们接触大数据开始,可能绕在耳边的词汇里面出现的次数越来越多的就包括kfaka了.kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息, ...
随机推荐
- 线性动归之Wooden Sticks
题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...
- Mac OS下安装mysqlclient遇到的一些坑
在玩django的同时,必须需要mysqlclient和pillow包,想在本地Mac上装上mysqlclient,但着实遇到不少坑,最终还是在github issue中找到了解决方法,这里记录一下, ...
- JSR 303 进行后台数据校验
一.JSR 303 1.什么是 JSR 303? JSR 是 Java Specification Requests 的缩写,即 Java 规范提案. 存在各种各样的 JSR,简单的理解为 JSR 是 ...
- Disruptor 高性能并发框架二次封装
Disruptor是一款java高性能无锁并发处理框架.和JDK中的BlockingQueue有相似处,但是它的处理速度非常快!!!号称“一个线程一秒钟可以处理600W个订单”(反正渣渣电脑是没体会到 ...
- day33 网络编程(下)
目录 上节课回顾: 一.传输层 二.应用层 三.socket 四.如何获取目标ip地址 五.网络通信的流程 上节课回顾: 通过ip地址如何找到另外一台设备 ip地址分为子网部分和主机部分 我们要和其他 ...
- 小白pytorch安装以及初步了解
安装遇到的几个坑: 1创建虚拟环境的时候出现Proceed ([y]/n)? 询问你是否覆盖旧版本,在命令行输入y即可进行下一步的安装操作了 安装pytorch前先了解 pytorch:一个开源pyt ...
- 【Nginx】如何获取客户端真实IP、域名、协议、端口?看这一篇就够了!
写在前面 Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中.这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者 ...
- Bootstrap 搭建基础页面
基于Bootstrap实现下图所示效果的页面,一个居中的标题和一个大按钮: <!DOCTYPE html> <html lang="zh-cn"> < ...
- tolua-ToLua#暖更新
"重写"C#函数的Lua函数要访问C#类对象的没有wrap进Lua环境的私有数据成员.私有方法的时候,目前只能使用静态反射. 关于全Lua开发.全C#开发的问题.全Lua开发可能或 ...
- Python 爬取 42 年高考数据,告诉你高考为什么这么难?
作者 | 徐麟 历年录取率 可能很多经历过高考的人都不知道高考的全称,高考实际上是普通高等学校招生全国统一考试的简称.从1977年国家恢复高考制度至今,高考经历了许多的改革,其中最为显著的变化就是录取 ...