一、概述

1,特点

)Scala同时支持不可变集合和可变集合
)两个主要的包:
不可变集合:scala.collection.immutable
可变集合: scala.collection.mutable
)Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本
)Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型。

2,不可变集合继承一览图

3,可变集合继承一览图

二、数组

1,可变和不可变:

  Array ===> ArrayBuffer

2,定义不可变数据数组方式

//定义数组:方式一
val arr = new Array[Int]()
//定义数组:方式二

val arr = Array(,,"scala") //调用apply方法
arr()= //赋值,索引1的值为8 //添加,生成一个新的数组
arr.+:()
//删除,删除值为1的元素(并且只刪除第一个
val array: Array[Any] = arr.drop()
//改,修改索引1的值为6
arr.update(,)
arr()=

3,定义变长数组

//定义变长数组
val ints = new ArrayBuffer[Int]()
val ints = ArrayBuffer[Int](, , ) //添加,同一个数组
ints.append()
//删除,删除索引为2之后的2个元素
ints.remove(,)
//改,同定长数组
ints()=
ints.update(,)

4,定长数组与变长数组转换

)arr1.toBuffer  //定长数组转可变数组
)arr2.toArray //可变数组转定长数组

5,多维数组

//定义 arr 是一个二维数组:有三个元素[一维数组],每个一维数组存放4个值
val arr = Array.ofDim[Double](,)
//赋值
arr()() = 11.11

6,Scala数组与Java的List互转

// Scala集合转成Java集合
val arr = ArrayBuffer("", "", "")
import scala.collection.JavaConverters._ //隐式转换
val javaList: util.List[String] = arr.asJava
println(javaList) //[1, 2, 3]
//java的List转成scala的ArrayBuffer
val arrList = new util.ArrayList[String]()
arrList.add("test")
//隐式转换
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable
val scalaArr: mutable.Buffer[String] = arrList

三、元组

1,简介

  元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据

  说的简单点,就是将多个无关的数据封装为一个整体,称为元组, 最大的特点灵活,对数据没有过多的约束。 //需求-> 高效率

2,创建

//1. tuple 的类型是 Tuple3
//2. 根据元素个数不同,对应的类型是 Tuple1----Tuple22
//3. Tuple是一个整体,使用迭代器进行遍历
//4. 访问Tuple的元素的方式是 tuple._1 .... tuple._3
//5. 元组是scala推荐使用,在java没有
val tuple = (, , "scala")

四、集合

1,定义:

  Scala的List可以直接存放数据,就是一个object,默认情况下Scala的List是不可变的,List属于序列Seq

  不可变、可变: List ===> ListBuffer

2,创建:

  val ints:List[Int] = List(1,2,3) //创建

  List默认采用不可变方式在immutable包下不用引包,List中可以放任何类型数据List[Any],空集合可以直接使用Nil对象

3,List常用操作

val ints = List(,,,)
//添加
val ints1 = ints :+ //ints集合后面追加
val ints2 = +: ints //ints集合前面添加
val ints3 = :: ints //将1作为元素往ints中添加
val ints3 = ints1 :: ints //将ints1中的元素与ints中元素合并为一个集合,:::两边都是集合
//修改,会生成一个新的集合
val intsUpdate = ints .updated(,)
//删除,截取原集合指定索引以及后面的所有元素生成一个新的集合
val intsDrop = ints.drop() //List(4, 5)

4,ListBuffer常用操作

val buffer = ListBuffer(,,)
//添加
buffer.append()
//修改
buffer.update(,)
//删除
buffer.remove()
println(buffer.mkString(",")) //6,1,10

五、Map

1,定义

  Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。

  不可变、可变: scala.collection.immutable.Map ===>  scala.collection.mutable.Map

2,不可变immutable.Map

//创建
//方式一:底层为元组Tuple2类型,输出顺序与声明顺序一致
val map1 = Map("A" -> , "B" -> , "C" -> )
//方式二:对偶元组
val map2 = Map( ("A", ), ("B", ), ("C", ),("D", ) )

3,可变mutable.Map

//创建: 输出顺序与声明顺序不一致
val map1 = scala.collection.mutable.Map("A" -> , "B" -> , "C" -> )
//添加
//添加并创建一个新的map
val map2 = map1 + ("FFF"->)
//添加,追加到原有mao中
map1 += ("FFF"->)
//删除指定key
map1 -= ("B","C")
//修改指定key的值,如果没有改key就为添加
map1.update("A",)

4,Map取值

//key不存在抛异常NoSuchElementException
map(key)
//map.get(key)得到Option对象,要么是Some要么是None
map.get(key).get
//key存在返回值,不存在返回默认值
map.getOrElse(key,default)

六、Set

1,可变不可变

  immutable.Set  ===> mutable.Set

2,可变set集合操作

//创建可变set集合
val mutableSet = mutable.Set(,,)
//添加元素的两种方式
mutableSet.add()
mutableSet +=
//删除元素的两种方式
mutableSet -=
mutableSet.remove()

scala数据结构(一)的更多相关文章

  1. Scala数据结构

    Scala数据结构 主要的集合特质 Scala同时支持可变集合和不可变集合,优先采用不可变集合.集合主要分为三大类:序列(List),集(set),映射(map).所有的集合都扩展自Iterable特 ...

  2. 10. Scala数据结构(上)-集合操作

    10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...

  3. scala 数据结构(一):数据结构简介

    1 数据结构特点 scala集合基本介绍 1)Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 2)两个主要的包: 不可变集合:scala.collection.immutable ...

  4. 11. Scala数据结构(下)-集合操作

    11.1 集合元素的映射-map映射操作 11.1.1 看一个实际需求 要求:请将List(3,5,8)中所有的元素都*2,将其结果放到一个新的集合中返回,即返回一个新的List(6,10,16),请 ...

  5. Scala数据结构(二)

    一.集合的基础操作 1,head头信息 //获取集合的第一个元素 val list = List(,,) list.head // 2,tail尾信息 //获取集合除去头元素之外的所有元素 val l ...

  6. scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合

    1 流 Stream stream是一个集合.这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果 ...

  7. scala 数据结构(九):-filter、化简

    1 filter filter:将符合要求的数据(筛选)放置到新的集合中 应用案例:将 val names = List("Alice", "Bob", &qu ...

  8. scala 数据结构(八 ):-map映射操作

    在Scala中可以通过map映射操作来解决: 将集合中的每一个元素通过指定功能(函数)映射(转换)成新的结果集合这里其实就是所谓的将函数作为参数传递给另外一个函数,这是函数式编程的特点 以HashSe ...

  9. scala 数据结构(七 ):集 Set

    集是不重复元素的结合.集不保留顺序,默认是以哈希集实现 默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包 1 集 ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法提高 师座操作系统

    算法提高 师座操作系统 时间限制:1.0s 内存限制:256.0MB 问题描述 师座这天在程序设计课上学了指针和结构体以后,觉得自己可以轻松的写出操作系统,为了打败大微软帝国,他给这个系统起了个响亮的 ...

  2. Java实现 LeetCode 92 反转链表 II

    92. 反转链表 II 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5-> ...

  3. Java实现最小费用最大流问题

    1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...

  4. java实现第五届蓝桥杯出栈次序

    出栈次序 X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同,只能容一辆车通过,是临时的检查站,如图[p1.png]所示. ...

  5. K8S-PV和PVC的实践

    一.什么是PV和PVC? PV的全称是Persistent Volume,翻译过来为持久化存储卷,是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,主要含存储能力.访问模式.存储类型.回收策略 ...

  6. 恕我直言,我怀疑你并不会用 Java 枚举

    开门见山地说吧,enum(枚举)是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,默认继承自 java.lang.Enum. 为了证明这一点,我们来新建一个枚举 PlayerType: p ...

  7. 强类型sql生成助手类

    不使用表达式树,使用强类型生成where子句,好处是性能高,相比表达式树生成的sql,10倍+ 目前只支持生成where条件.查询语句,后期会增加生成Update SQL where子句支持相等.比较 ...

  8. 手把手教你安装Ubuntu系统增强工具

    如果你不安装VMware增强工具的话,VMware经常会给你弹出下图的界面,提示你安装增强工具. 那么VMware增强工具到底有啥特别之处咧?其实在VMware虚拟机中安装好VMwareTools之后 ...

  9. QToolTip 设置提示信息

    import sys from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication) from PyQt5.QtG ...

  10. Spring之多数据源切换的应用

    这不是一个新的知识点扩展,顶多算是,Spring的AOP特性的一个应用.那么下面开始今天的学习之旅! 场景 数据库读写分离,或者分库,总之多数据源的场景,怎么样实现自动切换(PS:不考虑各种分库分表的 ...