集合
List 是不可变的
scala> List
res26: scala.collection.immutable.List.type = scala.collection.immutable.List$@6ada0261
scala> val list = List(1,2,3,4)
list: List[Int] = List(1, 2, 3, 4)
scala> list.head
res27: Int = 1
scala> list.tail
res28: List[Int] = List(2, 3, 4)
注意这里的 ::
scala> val list2=0::list
list2: List[Int] = List(0, 1, 2, 3, 4)
scala> def decorator(l:List[Int],prefix :String){
| if(l != Nil ){
| println(prefix+l.head)
| decorator(l.tail,prefix)
| }
| }
decorator: (l: List[Int], prefix: String)Unit
scala> decorator(List(1,2,3,4,5),"--")
--1
--2
--3
--4
--5
----------------------------------
LinkedList
首个元素 .elem
之后的元素 .next
scala> var linkedList = scala.collection.mutable.LinkedList(1, 2, 3, 4, 5)
<console>:11: warning: object LinkedList in package mutable is deprecated (since 2.11.0): low-level linked lists are deprecated
var linkedList = scala.collection.mutable.LinkedList(1, 2, 3, 4, 5)
^
linkedList: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)
scala> linkedList
res0: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)
scala> linkedList.elem
res1: Int = 1
scala> linkedList.head
res2: Int = 1
scala> linkedList.next
res3: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 3, 4, 5)
scala> linkedList.tail
res4: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 3, 4, 5)
while 循环 对每个元素 放大2倍
<console>:11: warning: object LinkedList in package mutable is deprecated (since 2.11.0): low-level linked lists are deprecated
var linkedList = scala.collection.mutable.LinkedList(1, 2, 3, 4, 5)
^
linkedList: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)
scala> var curr = linkedList
curr: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)
scala> while(curr!= Nil){
| curr.elem = curr.elem *2
| curr= curr.next
| }
scala> curr
res6: scala.collection.mutable.LinkedList[Int] = LinkedList()
scala> linkedList
res7: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 4, 6, 8, 10)
while 循环 对每隔元素 放大2倍
scala> var linkedList = scala.collection.mutable.LinkedList(1, 2, 3, 4, 5,6,7,8,9,10)
<console>:11: warning: object LinkedList in package mutable is deprecated (since 2.11.0): low-level linked lists are deprecated
var linkedList = scala.collection.mutable.LinkedList(1, 2, 3, 4, 5,6,7,8,9,10)
^
linkedList: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> var curr = linkedList
curr: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> while(curr!= Nil){
| curr.elem = curr.elem *2
| curr= curr.next.next
| }
scala> linkedList
res1: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 2, 6, 4, 10, 6, 14, 8, 18, 10)
----------------------------------
Set 是不可变的
scala> Set
res2: scala.collection.immutable.Set.type = scala.collection.immutable.Set$@4264beb8
scala> val set = Set(1,1,2,2,2,2,3,4)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
LinkedHashSet 会维护添加的顺序
scala> val s = scala.collection.mutable.LinkedHashSet[Int]()
s: scala.collection.mutable.LinkedHashSet[Int] = Set()
scala> s += 1
res6: s.type = Set(1)
scala> s += 3
res7: s.type = Set(1, 3)
scala> s += 5
res8: s.type = Set(1, 3, 5)
scala> s += 4
res9: s.type = Set(1, 3, 5, 4)
SortedSet 会自动给元素排序
scala> val s= scala.collection.mutable.SortedSet[String]()
s: scala.collection.mutable.SortedSet[String] = TreeSet()
scala> s += "d"
res10: s.type = TreeSet(d)
scala> s += "c"
res11: s.type = TreeSet(c, d)
scala> s += "b"
res12: s.type = TreeSet(b, c, d)
scala> s += "a"
res13: s.type = TreeSet(a, b, c, d)
----------------------------------
集合的函数编程
使用map 给list 每个元素添加前缀
scala> val list = List("a","b","c","d")
list: List[String] = List(a, b, c, d)
scala> list.map("+"+ _)
res14: List[String] = List(+a, +b, +c, +d)
flatMap 拆分 打平 为多个元素的集合
scala> val list = List("hello world","hello java","hello scala","hello hadoop")
list: List[String] = List(hello world, hello java, hello scala, hello hadoop)
scala> val list2 = list.flatMap(_.split(" "))
list2: List[String] = List(hello, world, hello, java, hello, scala, hello, hadoop)
scala> list2
res19: List[String] = List(hello, world, hello, java, hello, scala, hello, hadoop)
scala> list
res20: List[String] = List(hello world, hello java, hello scala, hello hadoop)
foreach遍历
scala> list.foreach(println(_))
hello world
hello java
hello scala
hello hadoop
zip 拉链操作
scala> val list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
scala> val list2 = List("a","b","c","d")
list2: List[String] = List(a, b, c, d)
scala> list1.zip(list2)
res21: List[(Int, String)] = List((1,a), (2,b), (3,c), (4,d))
scala> val aa = Array(10,2,3)
aa: Array[Int] = Array(10, 2, 3)
scala> aa.reduceLeft(_ - _)
res14: Int = 5
注意这个 reduceRight 相当于 10 - ( 2 - 3)
scala> aa.reduceRight(_ - _)
res15: Int = 11
----------------------------------
相关推荐
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
在这里,你会学习到Scala的安装与环境配置,理解Scala的基本语法,包括变量声明、数据类型(如基本类型、引用类型和集合类型)、控制结构(如条件语句和循环)以及函数定义和调用。此外,还会介绍Scala中的模式匹配...
Scala提供了丰富的集合框架,包括不可变集合和可变集合,支持诸如`List`、`Set`、`Map`等多种数据结构。 #### 异常 Scala中的异常处理与Java类似,支持`try`、`catch`和`finally`块。 #### 断言、检查 Scala还支持...
### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...
4. 集合库:Scala的集合库设计精良,包含各种高效的数据结构,如List、Set、Map等。这些集合不仅支持传统的OOP操作,还提供了丰富的函数式API,如map、filter、fold等,方便进行数据处理。 5. 特性与模式匹配:...
本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...
以上内容覆盖了 Scala 编程语言的核心知识点,从基本语法到高级特性,为初学者提供了一个全面的学习指南。Scala 是一门功能强大且灵活的语言,适合于构建大型的、复杂的软件系统。希望这些知识点能够帮助读者更好地...
1. **学习Scala的原因**: Scala的出现主要是为了解决Java等传统编程语言在处理并发、复杂数据结构和模式匹配等方面的问题。它的设计目标是提高代码的可读性和可维护性,同时提供强大的类型系统和表达能力,使得...
以下是一些在学习Scala时可能会遇到的关键知识点: 1. **基本语法与类型系统**: - Scala是强类型语言,变量声明时必须指定类型,但可以使用类型推断简化编写。 - `val`用于声明不可变变量,`var`用于声明可变...
* for 语句:Scala 的 for 语句可以遍历集合、循环守卫、循环步长和嵌套循环等。 * while 循环:Scala 的 while 循环与 Java 相似,但可以使用 `break` 语句中断循环。 函数式编程 Scala 的函数式编程是指使用函数...
《scala集合技术手册》笔记+《LearningConcurrentProgrammingInScala》例子及习题
3. 集合:Scala提供了丰富的集合库,包括List、Set、Map等,它们支持高阶函数,如map、filter、fold等,使得集合操作简洁高效。 二、类型系统 1. 泛型:Scala的泛型是类型擦除的,但支持类型约束和类型推断,提供...
总结,本Scala笔记Markdown版本涵盖了从语言基础到集合操作的重要内容,适合初学者入门和有经验的开发者巩固知识。通过学习,开发者将能够掌握Scala的核心特性和编程技巧,从而更好地利用Scala进行后端开发。
Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的...通过学习,你可以熟练掌握Scala语言,应用于大数据处理、分布式计算以及构建高并发、高可用的应用系统。
目录如下 Scala简介&快速入门 基础语法 变量 数据类型 流程控制 ...Scala数据结构之集合 函数式编程高级 隐式转换和隐式值 偏函数 高阶函数 闭包closure 柯里化函数 控制抽象 递归高级 Akka 介绍
"Scala-notes:小号"这个标题可能指的是一个关于学习Scala的资料集合,其中包含了笔记和作业,帮助学习者深入理解和实践Scala编程。 在描述中提到的"Scala音符"可能是一个比喻,暗示着通过学习这个资料,你可以掌握...
在学习笔记中,这可能以简单的case语句形式出现。 另外,Scala中的 Actors 模型提供了轻量级线程,用于实现并发和并行计算。Actors有自己的消息队列,可以安全地交换信息,避免了传统多线程中的竞态条件问题。初学...
"scala-notes"可能是一个关于Scala编程的学习笔记或者教程集合,而"scala-notes-master"可能代表这是该资料的主目录或者最新版本。 在Scala中,你将学习到以下关键概念: 1. **类型系统**:Scala有强大的静态类型...
描述Scala BigCollections提供按Long值索引的集合,这意味着它们不限于标准集合之类的20亿个元素。动机Scala BigCollections的目标是提供一些简单的集合,这些集合可以容纳实际上可以容纳在内存中的尽可能多的元素。...