`

学习scala笔记--23 scala集合

 
阅读更多

 

 

集合

 

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概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    scala讲解笔记 入门及进阶 PDF文档1-5

    在这里,你会学习到Scala的安装与环境配置,理解Scala的基本语法,包括变量声明、数据类型(如基本类型、引用类型和集合类型)、控制结构(如条件语句和循环)以及函数定义和调用。此外,还会介绍Scala中的模式匹配...

    Scala详细总结(精辟版++)

    Scala提供了丰富的集合框架,包括不可变集合和可变集合,支持诸如`List`、`Set`、`Map`等多种数据结构。 #### 异常 Scala中的异常处理与Java类似,支持`try`、`catch`和`finally`块。 #### 断言、检查 Scala还支持...

    scala的操作笔记

    ### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...

    scala学习资料

    4. 集合库:Scala的集合库设计精良,包含各种高效的数据结构,如List、Set、Map等。这些集合不仅支持传统的OOP操作,还提供了丰富的函数式API,如map、filter、fold等,方便进行数据处理。 5. 特性与模式匹配:...

    scala-learn:scala学习笔记

    本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...

    scala学习笔记

    以上内容覆盖了 Scala 编程语言的核心知识点,从基本语法到高级特性,为初学者提供了一个全面的学习指南。Scala 是一门功能强大且灵活的语言,适合于构建大型的、复杂的软件系统。希望这些知识点能够帮助读者更好地...

    scala笔记:学习scala时的笔记

    以下是一些在学习Scala时可能会遇到的关键知识点: 1. **基本语法与类型系统**: - Scala是强类型语言,变量声明时必须指定类型,但可以使用类型推断简化编写。 - `val`用于声明不可变变量,`var`用于声明可变...

    Scala初学者入门课程笔记

    * for 语句:Scala 的 for 语句可以遍历集合、循环守卫、循环步长和嵌套循环等。 * while 循环:Scala 的 while 循环与 Java 相似,但可以使用 `break` 语句中断循环。 函数式编程 Scala 的函数式编程是指使用函数...

    《scala集合技术手册》笔记+《LearningConcurrentProgrammingInScala》例子及习题.zip

    《scala集合技术手册》笔记+《LearningConcurrentProgrammingInScala》例子及习题

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    1. **学习Scala的原因**: Scala的出现主要是为了解决Java等传统编程语言在处理并发、复杂数据结构和模式匹配等方面的问题。它的设计目标是提高代码的可读性和可维护性,同时提供强大的类型系统和表达能力,使得...

    scala-impatient-notes

    3. 集合:Scala提供了丰富的集合库,包括List、Set、Map等,它们支持高阶函数,如map、filter、fold等,使得集合操作简洁高效。 二、类型系统 1. 泛型:Scala的泛型是类型擦除的,但支持类型约束和类型推断,提供...

    Scala笔记Markdown版本(至集合章节)

    总结,本Scala笔记Markdown版本涵盖了从语言基础到集合操作的重要内容,适合初学者入门和有经验的开发者巩固知识。通过学习,开发者将能够掌握Scala的核心特性和编程技巧,从而更好地利用Scala进行后端开发。

    Scala-Tutorial:Scala语法学习笔记与程式码范例from 韩顺平老师教学

    Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的...通过学习,你可以熟练掌握Scala语言,应用于大数据处理、分布式计算以及构建高并发、高可用的应用系统。

    SCALA从入门到精通个人笔记含代码

    目录如下 Scala简介&快速入门 基础语法 变量 数据类型 流程控制 ...Scala数据结构之集合 函数式编程高级 隐式转换和隐式值 偏函数 高阶函数 闭包closure 柯里化函数 控制抽象 递归高级 Akka 介绍

    Scala-notes:小号

    "Scala-notes:小号"这个标题可能指的是一个关于学习Scala的资料集合,其中包含了笔记和作业,帮助学习者深入理解和实践Scala编程。 在描述中提到的"Scala音符"可能是一个比喻,暗示着通过学习这个资料,你可以掌握...

    Scala_day01_scala_

    在学习笔记中,这可能以简单的case语句形式出现。 另外,Scala中的 Actors 模型提供了轻量级线程,用于实现并发和并行计算。Actors有自己的消息队列,可以安全地交换信息,避免了传统多线程中的竞态条件问题。初学...

    scala-notes

    "scala-notes"可能是一个关于Scala编程的学习笔记或者教程集合,而"scala-notes-master"可能代表这是该资料的主目录或者最新版本。 在Scala中,你将学习到以下关键概念: 1. **类型系统**:Scala有强大的静态类型...

    scala-bigcollections:长索引的Scala的位和双打大集合

    描述Scala BigCollections提供按Long值索引的集合,这意味着它们不限于标准集合之类的20亿个元素。动机Scala BigCollections的目标是提供一些简单的集合,这些集合可以容纳实际上可以容纳在内存中的尽可能多的元素。...

Global site tag (gtag.js) - Google Analytics