Scala学习——集合
Scala集合
一、数组
package top.ruandb.scala.Course04
object ArrayApp { def main(args: Array[String]): Unit = {
//定义数组
val a = new Array[String](5)
//直接定义
val b = Array("java","scala","bash","swift")
val c=Array(1,2,3,4,5,6,7,8,9,10)
//数组中常用方法
println(a.length)
println(c.sum)
println(c.max)
println(c.min)
println(b.mkString(":")) //以:分割成字符串 :java:scala:bash:swift
println(b.mkString("<",":",">")) //结果:<java:scala:bash:swift> //定义变长数组
val d = scala.collection.mutable.ArrayBuffer[Int]()
d += 1 //添加元素
d += (2,3,4,5) //一次性添加多个元素
d ++= Array(6,7,8) //直接添加定长数组元素
println(d.mkString(",")) // 1,2,3,4,5,6,7,8
d.insert(0,0) //向指定位置添加指定元素
println(d.mkString(",")) // 0,1,2,3,4,5,6,7,8
d.remove(0) //删除指定位置的元素
d.remove(0,3) //从某个位置开始,删除n个元素
d.trimEnd(2) //从最后面删除n个元素
d.toArray //转换成定长数组 //遍历数组
for(ele <- d){
println(ele)
}
for(i <- 0 until c.length){
println(i)
} }
}
二、List(有序的,可重复的)
package top.ruandb.scala
object ListApp extends App {
val ln =Nil //定义一个空List
println(ln)
val l = List(1,2,3,4,5,6) //定义List
println(l)
println(l.head) //获取头 (1)
println(l.tail)//获取尾 (2,3,4,5,6)
val l2 = 0 :: l //(0.1,2,3,4,5,6)
println(l2)
val l5 = scala.collection.mutable.ListBuffer[Int]()//可变List
l5 += 1 //添加单个元素
l5 += (2,3,4) //添加多个元素
l5 ++= List(5,6,7,8,9) //添加定长List
print(l5)
l5 -=1 //移除单个元素
l5 -=(2,3,4) //移除多个元素
l5 --=List(5,6,7,8) //移除一个定长List
}
三、Set(无序的,不可重复的)
package top.ruandb.scala.Course04
object SetApp {
def main(args: Array[String]): Unit = {
val set1 = Set(2,2,3,4) //不可变set
println(set1) //(2,3,4)
val set2 = scala.collection.mutable.Set[Int]()//可变set,操作同list类似
set2 += 0
set2 += (1,2,3,4)
set2 ++= Set(5,6)
}
}
四、Map(键值对)
package top.ruandb.scala.Course04
object MapApp {
def main(args: Array[String]): Unit = {
val m1 = Map("jack"-> 10,"lucy"-> 17)//定义Map
println(m1)
println(m1("lucy"))
val m2 = scala.collection.mutable.Map("jack"-> 10,"lucy"-> 17)//可变的map
println(m2)
println(m2("lucy"))
m2("lucy") = 99 // mutable Map 的值可修改
println(m2("lucy"))
val m3 = scala.collection.mutable.HashMap[String , Int]() //定义一个空的Map
m3 += ("jack" -> 19)
m3 += ("lucy" -> 99,"lisi" -> 88)
m3 ++= Map("wangwu" -> 77,"zhaoliu" -> 66)
println(m3)
//遍历Map
for((key,value) <- m3){
println(key,value)
}
for( key<-m3.keySet){
println(key,m3.get(key))
}
}
}
五、Tuple(元组)
package top.ruandb.scala.Course04
object TupleApp {
def main(args: Array[String]): Unit = {
val name = ("jack","lucy","zhangsan","lisi") //定义一个Tuple
println(name._1 + ":" + name._2 + ":" + name._3 + ":" + name._4) //取值
//遍历元组
for(i <-0 until(name.productArity)){
println(name.productElement(i))
}
}
}
六、Option Some None
大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null。在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。
为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型。在没有值的时候,使用None,这是Option的一个子类。如果有值可以引用,就使用Some来包含这个值。Some也是Option的子类。
Scala学习——集合的更多相关文章
- Scala学习——集合的使用和“_”的一些使用(中)
1.空格加_可以表示函数的原型 命令行代码: scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala ...
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...
- Scala学习笔记--集合类型Queue,Set
补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...
- Spark基础-scala学习(五、集合)
集合 scala的集合体系结构 List LinkedList Set 集合的函数式编程 函数式编程综合案例:统计多个文本内的单词总数 scala的集合体系结构 scala中的集合体系主要包括:Ite ...
- Scala学习笔记(五)—— 元组和集合
1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...
- Scala学习十三——集合
一.本章要点 所有集合都扩展自Iterable特质; 集合有三大类,分别为序列,集和映射; 对于几乎所有集合类,Scala都同时提供可变和不可变的版本; Scala列表要么是空的,要么拥有一头一尾,其 ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
随机推荐
- 阿里云视频云 Retina 多媒体 AI 体验馆开张啦!
带你体验视频更多可能 海量视频管理难度大?翻库检索特定人物费时费力?视频内容剪辑效率低?您的得力助手"Retina多媒体AI"体验馆已上线.带你感受视频AI黑科技,开启极致智能体验 ...
- InnoDB 静态数据加密的常见问题合集
1. 数据是否为有权查看数据的用户解密? 是的.InnoDB静态数据加密旨在透明地在数据库中应用加密,而不会影响现有应用程序.以加密格式返回数据会破坏大多数现有应用程序. InnoDB静态数据加密提供 ...
- Java将字符串反转的7种方法
/方法1 递归方法 public static String reverse1(String s) { int length = s.length(); if(length <= 1){ ret ...
- 【模拟8.01】big(trie树)
一道trie树的好题 首先我们发现后手对x的操作就是将x左移一位,溢出位在末尾补全 那么我们也可以理解为现将初值进行该操作,再将前i个元素异或和进行操作,与上等同. 那么我们等于转化了问题: ...
- redis cluster如何支持pipeline
当我们要操作一批key时,可以通过 redis pipline 再执行完后一次性读取所有结果来较少网络传输的消耗: 很明显,这有个限制条件 => 这批key的执行必须在同一个连接上 当部署的re ...
- 基于ABP落地领域驱动设计-00.目录和小结
<实现领域驱动设计> -- 基于 ABP Framework 实现领域驱动设计实用指南 翻译缘由 自 ABP vNext 1.0 开始学习和使用该框架,被其优雅的设计和实现吸引,适逢 AB ...
- 用transform和rem哪个好
个人觉得电脑端的用transform好,毕竟电脑端的项目基本都会固定屏幕比列,16:9.28:9.32:9的 一个固定的设计稿就能很好的适配. 移动端用rem比较好,移动端的屏幕比列太杂,使用rem自 ...
- 处理python中的信号
什么是信号 信号(signal)-- 进程间通讯的一种方式,也可作为一种软件中断的方法.一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理. 简化术语,信号是一个事件,用于中断运行功能的执 ...
- 二QT中使用QTimer定时器
QT中的定时器类叫QTimer(5.8以上版本才有),构造函数只需要提供父对象的指针 使用的话,需要调用QTImer的start方法,该方法以毫秒单位,每过指定毫秒时间,该类对象就会发出一个timeo ...
- 10 一键部署LNMP网站平台
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin NGINX_V=1.19.1 P ...