Git 高阶函数 Apache gps EasyCVR css null arm vue开发教程 jq选择子元素 mysql操作日志 华为路由器ipv6配置 matlab中axis nodejs后端开发 python中sort函数 java入门 java文档 java数组 java常用数据结构 linux命令 街头篮球辅助 linux操作系统原理 stata软件 倒计时计时器 超星网课助手 免费的视频剪辑 刷新页面 linux定时任务 红巨人插件 微信小程序源代码 js字符转数字 迅雷单机游戏下载 水之td合成 加字幕软件 cdr怎么填充颜色 ppt虚线怎么画 pcmark10 黑暗系情侣头像 电子书籍下载 标记宏
当前位置: 首页 > 学习教程  > 编程语言

Scala之集合体系(九)

2020/8/31 14:34:40 文章标签:

Scala集合基本介绍

可变集合与不可变集合

可变集合: scala.collection.mutable
不可变集合:scala.collection.immutable

常用集合种类

  1. Seq(序列):有序,比如数组与列表。
  2. Set:无序;在SortedSet中,元素以某种排过序的顺序被访问
  3. Map:是一组对偶(key,value)

数组

定长数组

第一种方式创建定长数组

val arr01 = new Array[Int](10)
arr01(1) = 20	// 对数组中的值进行重新赋值

第二种方式创建定长数组

// 创建方式使用的是数组的apply方法
var arr02 = Array("tom",3.9,"jack")	// 说明泛型为 Any
arr02(2) = "sal"
可变数组

可变数组有点类似于Java中ArrayList

// 初始化
val arr = ArrayBuffer[Any]()
arr.append(100,10.9)	// 添加元素,类似于扩容
arr(0) = 20 			// 修改元素
arr.remove(1)			// 根据下标删除元素
arr.length				// 获取数组长度

注意:ArrayBuffer每append一次,arr在底层会重新分配空间,进行相应的扩容,arr的内存地址也会发生相应的改变,成为了新的ArrayBuffer

定长数组与可变数组的转换
arr.toBuffer	// 定长数组转可变数组
arr.toArray		// 可变数组转定长数组

元组

基础概念

映射是键值对偶的集合。对偶是元组(tuple)的最简单形态——元组是不同类型的值的聚集。

元组的使用

1.元组的创建

val tuple1 = (1, 2, 3, "hello", 4)

2.元组的访问方式

println(tuple1._1) // 访问元组的第一个元素,从1开始
println(tuple1.productElement(0)) // 使用索引的方式,访问元组的第一个元素,从0开始

上述的 productElement 方式访问元组其实还是第一种方式,只是使用了模式匹配的方式实现。

override def productElement(n: Int) = n match { 
    case 0 => _1
    case 1 => _2
    case 2 => _3
    case 3 => _4
    case 4 => _5
    case _ => throw new IndexOutOfBoundsException(n.toString())
 }

3.元组的遍历

for (item <- tuple1.productIterator) {
      println("item=" + item)
    }

4.注意事项

  • 元组的类型取决于元组后面有多少个元素,比如有10个元素对应Tuple10
  • 元组最大只能有22个元素

列表 List

基础概念

Scala中的List可以直接存放数据,就是一个对象,默认情况下Scala的List是不可变的,想使用可变的List,则可以使用ListBuffer。

不可变列表的使用

1.创建方式

val list1 = List(1,2,3)  // 创建时直接分配元素
val list= Nil // 表示创建了空集合

2.基本功能的使用

val value = list1(1)  // 使用索引的方式,取的是第二个元素
val list2 = list1 :+ 4    // :+运算符表示在列表的最后增加数据
val list3 = 5 +: list1    // +:运算符表示在列表的最前面增加数据
val list5 = 4 :: 5 :: 6:: list1 ::: Nil   // ::: 扁平化操作,是将左边集合中的数据取出来,添加到右边的空集合中;执行顺序是从右向左

注意事项:在使用 :+ 与 +: 等运算时其本身的列表是不会发生变化的,相当于创建了一个新的列表。

可变列表ListBuffer的使用

1.创建方式

val list1 = ListBuffer[Int](1,2,3)	// 创建时规定类型

2.基本功能的使用

list1(0) // 通过索引的方式来访问列表元素
list1 += 4	// 动态的增加元素
list1.append(5)
list1.remove(1) // 将下标为1的元素删除

队列 Queue

基础概念

队列是一个有序列表,可以使用数组或者链表的方式去实现;队列遵循先进先出的原则。

队列的使用

1.队列的创建

val q1 = new mutable.Queue[Int]()	// 创建的是一个可变队列
println(q1)

2.给队列追加元素

q1 += 9		// 追加一个元素
q1 ++= List(4,5,6)	// 将一个列表中的数据直接追加到队列的后面

3.队列的入队与出队操作

val queueElement = q1.dequeue()  // 出队操作
q1.enqueue(10,20,30,40,50)	// 入队操作,默认是队列的尾部加入

4.返回队列元素

q1.head	// 获取队列的头元素
q1.last	// 获取队列的最后一个元素
q1.tail	// 返回除第一个元素以外的剩余元素

映射 Map

基础概念

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

Map的使用

1.map的构建方式

val map1 = Map("Alice" -> 10,"jack" -> 20)	// 构建了一个不可变映射
val map2 = mutable.Map("Alice" -> 10, "jack" -> 20, "tom" -> 30) //	构建了一个可变映射
val map3 = new mutable.HashMap[String,Int]()	// 构建了一个空的映射 
val map4 = mutable.Map(("a", 1), ("b", 2), ("c", 3)) // 构建了一个对偶元组 

2.map的取值方式

map.get(key)	// 通过key来进行取值
map.get(key).get // 如果key存在,返回Some值,用Some值.get就可以取出值
map.getOrElse(key,default) // 如果key值存在,返回可以对应的值;不存在就返回默认值

3.map修改操作

map1("jack") = 30 // 更新元素,key存在则为更新,不存在为新增

4.map添加操作

map1 += ("miss" -> 40)	// 添加单个映射
val map5 = map1 + ("ken" -> 50, "herry" -> 60) // 添加多个映射

5.map删除操作

map5 -= ("ken","herry","aa") // 如果删除的key不存在,也不会报错

6.map的遍历方式

println("==============第一种遍历方式===============")
for ((k,v) <- map) {
      println(k + " is mapped to " + v)
}

println("==============第二种遍历方式===============")
// 获取所有的键
for (item <- map.keys) {
      println(item)
}

println("==============第三种遍历方式===============")
// 获取所有的值
for (item <- map.values) {
      println(item)
}

println("==============第四种遍历方式===============")
// 这样取出的是元组的方式
for (v <- map) {
      println(v)
}

集 Set

基础概念

集是不重复元素的结合。集不保留顺序,默认是以哈希集实现!

Set的使用

1.Set的构建方式

val set = Set(1,2,3)  // 不可变集
val set1 = mutable.Set(1, 2, "hello")	// 可变集

2.Set中元素的添加

set1.add(10)
set1 += 20
set1.+=(30)

3.Set中元素的删除

set1.remove(10)
set1 -= 20

4.Set中元素的遍历

for (item <- set1) {
    println(item)
}

本文链接: http://www.dtmao.cc/news_show_150240.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?