Scala集合学习总结
遍历集合可以使用迭代器iterator的那套迭代方式。Seq是一个有先后次序的序列,比如数组或列表。IndexedSeq可以通过下标进行任意元素的访问。例如ArrrayBuffer。
Set是一组没有先后次序的值,在SortedSet中,元素以某种排过序的顺序被访问。
Map是一组(键,值)对偶,SortedMap按照键的顺序访问实体
Scala集合有三个基本操作:
head 返回集合第一个元素
tail 返回一个集合,包含除了第一元素之外的其他元素
isEmpty 在集合为空时返回true
- 可变和不可变的集合
Scala同时支持可变的和不可变的集合,不可变的集合从不改变,因此不可变集合是线程安全的集合,例如有:scala.collection.mutable.Map,也有scala.collection.immutable.Map。它们有一个共有的超类型scala.collection.Map
Scala优先采用不可变集合。scala.collection包中的伴生对象产出不可变的集合例如:scala.collection.Map("hello" -> 42)是一个不可变的映射
- 添加元素和移除元素的操作符
- 向后(:+)或向前(+:)追加元素到序列当中
- 添加(+)元素到无先后次序的集合中
- 用-移除元素
- 用++和--来批量添加和移除元素
- 对于列表优先使用::和:::
- 改值操作有+=,++=,-=,--=
- 对于集合,使用++,&和--
- 尽量不用++:,+=:和++=:
def main(args: Array[String]): Unit = {
// 初始化构建元素个数为4的集合对象
val v = Vector(1, 2, 3, 4)
// 添加集合后添加5(新建集合添加5)
println(v :+ 5)
// 集合前添加0(新建集合添加0)
println(5 +: v)
// 初始化构建高效数组缓存
val array = ArrayBuffer(1, 2, 3, 4)
// 添加元素5
println(array += 5)
// 删除元素1
println(array -= 1)
// 初始化Set集合对象
val number = Set(1, 2, 3)
// 添加4元素(新建set集合添加4)
println(number + 4)
// 添加4元素(新建set集合移除3)
println(number - 3)
// 使用++添加多个set元素(结果为无序的)
println(number ++ Set(4, 5, 6))
}
}
可以使用++一次添加多个元素,也可以使用--一次删除多个元素
- 将函数映射到集合
有时候可以对元素进行变换,map方法可以将某个函数应用到集合每个元素并进行相应的元素处理
// 初始化创建List集合映射map
val name = List("Bob", "Michael", "Marry")
println(name.map(_.toUpperCase))
val result = for (n <- name) yield n.toUpperCase
println(result)
// 拼接字符串
def unclase(string: String) = Vector(string.toLowerCase(), string.toUpperCase())
println(name.flatMap(unclase))
- 与java集合相互转换
import scala.collection.JavaConversions._
需要手动导入,在项目中发现不手动导入这个,idea编辑器编译器会报错
常见转换api
| 隐式函数 | java集合类型 |
|---|---|
| asjavaEnumeration | Enumeration |
| setAsJavaSet | Set |
| mapAsJavaMap | Map |
| bufferAsJavaList | List |
Scala集合学习总结的更多相关文章
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- Scala集合笔记
Scala的集合框架类比Java提供了更多的一些方便的api,使得使用scala编程时代码变得非常精简,尤其是在Spark中,很多功能都是由scala的这些api构成的,所以,了解这些方法的使用,将更 ...
- Scala函数式编程(三) scala集合和函数
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...
- Scala集合操作
大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: 1.数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储技术现在比较经典方案是使用Hadoop,不过也很多方案采用Kafka. ...
- 转:深入Java集合学习系列:HashSet的实现原理
0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...
- Spark:scala集合转化为DS/DF
scala集合转化为DS/DF case class TestPerson(name: String, age: Long, salary: Double) val tom = TestPerson( ...
- Scala集合常用方法解析
Java 集合 : 数据的容器,可以在内部容纳数据 List : 有序,可重复的 Set : 无序,不可重复 Map : 无序,存储K-V键值对,key不可重复 scala 集合 : 可变集合( ...
- 2019/3/4 java集合学习(二)
java集合学习(二) 在学完ArrayList 和 LinkedList之后,基本已经掌握了最基本的java常用数据结构,但是为了提高程序的效率,还有很多种特点各异的数据结构等着我们去运用,类如可以 ...
- 2019/3/2周末 java集合学习(一)
Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...
随机推荐
- url override and HttpSession implements session
背景 HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现. 实现 ...
- 转:C#中的多态
封装.继承.多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了.我一直认为学习OO的最好方法就是结合实践,封装.继承在实际工作中的应用随处 ...
- Custom Settings.in 配置信息收集
[Settings] Priority=Default Properties=MyCustomProperty [Default] ;是否允许部署操作系统到目标计算机 OSInstall=YES ;是 ...
- 铁乐学python_day22_面向对象编程4
以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 封装 [封装]隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提 ...
- (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态
1.访问控制(笔试题)1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问权 ...
- 用一个变量表示 ----------"序号,名称,价格"
goods = [{"name": "电脑", "price": 1999}, {"name": & ...
- 如何使用Jfreechart生成柱状图?
JFreeChart是JAVA平台上的一个开放的图表绘制类库. 首先 (http://www.jfree.org /jfreechart) 总这个网址下载所需要的库,然后解压,放在某个地方. 我们默认 ...
- Jenkins 配合 GitLab 实现分支的自动合并、自动创建 Tag
Jenkins 配合 GitLab 实现分支的自动合并.自动创建 Tag 背景 GitFlow工作流简介 Gitflow工作流定义了一个围绕项目发布的严格分支模型,它会相对复杂一点,但提供了用于一个健 ...
- 使用transient关键字解决ehcache序列化错误
使用Ehcache时发现个不起眼的小问题 在一个Model中有以下代码: public class MyModel implements Serializable { private static f ...
- 【LGP4886 】快递员
题目 好秒啊,真是一道神仙的点分治 于是我们来一个暴力的\(O(nlog^2n)\)的暴力统计吧 考虑计算每一个点作为快递中心时的答案 我们考虑在这个点成为分治重心时计算这个贡献 把这个贡献分成两部分 ...