scala集合

目录

1.集合简介

 1.1scala的集合有三大类:

1.2不可变集合关系一览:

IndexedSeq 和 LinearSeq 的区别:

1.3可变集合关系继承图:

2.数组

2.1不可变数组(Array)

2.2可变数组(ArrayBuffer)

2.3不可变数组和可变数组的转换

2.4多维数组

3.列表List

3.1不可变List

3.2可变ListBuffer

4.Set集合

4.1不可变Set

4.2可变mutableSet

5.Map集合

5.1不可变Map

5.2可变Map

6.元组


1.集合简介

 1.1scala的集合有三大类:

序列Seq,集Set,映射Map,所有的集合都扩展至Iterable特质

  对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两 个包

      不可变集合:scala.collection.immutable

      可变集合:scala.collection.mutable

  Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而 不会

对原对象进行修改。类似于 java 中的 String 对象

  可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似 于 java 中 StringBuilder 对象

建议:操作集合时,不可变用操作符,可变用方法。操作符也不一定就会返回新对象,但大多是这样的,还是要具体看。

scala中集合类的定义比java要清晰不少

1.2不可变集合关系一览:

 

setmapjava中本来就有的,哈希表和二叉树实现是肯定都有的,seqjava没有的,List归属到seq了,则scalalistjavalist不是一个概念

IndexSeq下的range可以写成for循环中的1 to 3 也就是隐式转换加上方法调用

scala中的String就是java.lang.String,和集合无直接关系,所以是虚箭头,是通过Perdef中的低优先级隐式转换来做到的。经过隐式转换为一个包装类型后就可以当做集合,Arraystring类似。

大家注意 Scala 中的 Map 体系有一个 SortedMap,说明 Scala 的 Map 可以支持排序

IndexedSeq 和 LinearSeq 的区别:

(1)IndexedSeq 是通过索引来查找和定位,因此速度快,比如 String 就是一个索引集合,通过索引即可定位

(2)LinearSeq 是线型的,即有头尾的概念,这种数据结构一般是通过遍历来查找

此类包装为了兼容java在scala中非常常见,scala中很多类型就是对java类型的包装或者仅仅是别名。

scala中可能会推荐更多地使用不可变集合。能用不可变就用不可变。

 

1.3可变集合关系继承图:

整体结构差不多,在序列中多了一个Buffer

2.数组

不可变和可变:

  • 不可变指的是对象大小不可变,但是可以修改元素的值(不能修改那创建了也没有用对吧),需要注意这一点。而如果用了val不变量存储,那么指向对象的地址也不可变。
  • 不可变集合在原集合上个插入删除数据是做不到的,只能返回新的集合。

泛型:

  • 集合类型大多都是支持泛型,使用泛型的语法是[Type],不同于java的<Type>

2.1不可变数组(Array

分为两种定义方式:

第一种:

案例:

第二种:

案例:

2.2可变数组(ArrayBuffer

定义变长数组 val arr01 = ArrayBuffer[Any](3, 2, 5)

(1)[Any]存放任意数据类型

(2)(3, 2, 5)初始化好的三个元素

(3)ArrayBuffer 需要引入 scala.collection.mutable.ArrayBuffer

案例:

(1)ArrayBuffer 是有序的集合

(2)增加元素使用的是 append 方法(),支持可变参数

2.3不可变数组和可变数组的转换

arr1.toBuffer //不可变数组转可变数组

 arr2.toArray //可变数组转不可变数组

(1)arr2.toArray 返回结果才是一个不可变数组,arr2 本身没有变化

(2)arr1.toBuffer 返回结果才是一个可变数组,arr1 本身没有变化

案例:

2.4多维数组

二维数组:就是数组的数组

案例:

3.列表List

3.1不可变List

(1)List 默认为不可变集合

(2)创建一个 List(数据有顺序,可重复)

(3)遍历 List

(4)List 增加数据

(5)集合间合并:将一个整体拆成一个一个的个体,称为扁平化

(6)取指定数据

(7)空集合 null

案例:

总结:

List,抽象类,不能直接new,使用伴生对象apply传入元素创建。

List本身也有apply能随机访问(做了优化),但是不能update更改。

foreach方法遍历。

支持+: :+首尾添加元素。

Nil空列表,::添加元素到表头。

常用Nil.::(elem)创建列表,换一种写法就是10 :: 20 :: 30 :: Nil得到结果List(10, 20, 30),糖是真滴多!

合并两个列表:list1 ::: list2 或者list1 ++ list2

3.2可变ListBuffer

(1)创建一个可变集合 ListBuffer

(2)向集合中添加数据

(3)打印集合数据

案例:

总结:

可变列表ListBuffer,和ArrayBuffer很像。

final的,可以直接new,也可以伴生对象apply传入元素创建(总体来说scala中更推荐这种方式)。

方法:append prepend insert remove

添加元素到头或尾:+=: +=

合并:++得到新的列表,++=合并到源上。

删除元素也可以用-=运算符。

具体操作很多,使用时阅读文档即可。

4.Set集合

默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用

scala.collection.mutable.Set 包

4.1不可变Set

案例:

总结:

数据无序,不可重复。

可变和不可变都叫Set,需要做区分。默认Set定义为immutable.Set别名。

创建时重复数据会被去除,可用来去重。

添加元素:set + elem

合并:set1 ++ set2

移除元素:set - elem

不改变源集合。

4.2可变mutableSet

案例:

操作基于源集合做更改。

为了与不可变集合区分,import scala.collection.mutable并用mutable.Set

不可变集合有的都有。

添加元素到源上:set += elem add

删除元素:set -= elem remove

合并:set1 ++= set2

都很简单很好理解,多看文档和源码就行。

5.Map集合

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

5.1不可变Map

案例:

5.2可变Map

案例:

6.元组

元组可以理解为一个容器,可以存放各种相同或者不同类型的数据,也就是将无关的数据封装为一个整合体。

注意:元组最大只能有22个元素。swap方法可以将只有两个元素的一个元组其中内容相互调换

案例:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scala中的集合分为可变集合和不可变集合两种。不可变集合一旦创建,就不能进行修改。Scala中默认使用不可变集合,如果需要修改集合中的元素,则需要使用可变集合Scala中的集合包括List、Set、Map等。常用的集合操作有: 1. 创建集合:可以使用不可变集合的apply方法或者可变集合的new关键字创建集合。 2. 遍历集合:可以使用for循环、foreach方法或者map方法遍历集合。 3. 过滤元素:可以使用filter方法过滤集合中不符合条件的元素。 4. 转换集合:可以使用map方法将集合中的元素进行转换。 5. 排序集合:可以使用sorted方法对集合中的元素进行排序。 6. 操作集合:可以使用集合的各种方法进行元素的添加、删除、更新等操作。 示例代码: ``` // 创建不可变列表 val list = List(1, 2, 3) // 遍历列表 for (i <- list) { println(i) } // 过滤列表中的偶数 val filteredList = list.filter(_ % 2 == 0) // 转换列表中的元素 val mappedList = list.map(_ * 2) // 排序列表 val sortedList = list.sorted // 创建可变列表 val mutableList = scala.collection.mutable.ListBuffer(1, 2, 3) // 添加元素到可变列表 mutableList += 4 // 删除可变列表中的元素 mutableList -= 2 // 更新可变列表中的元素 mutableList(0) = 0 // 遍历可变列表 mutableList.foreach(println) ``` 以上是Scala集合的基本用法,具体使用时可以根据需要选择不同的集合类型和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值