Scala数据结构

您所在的位置:网站首页 scala常用的容器类型 Scala数据结构

Scala数据结构

2024-07-16 21:38| 来源: 网络整理| 查看: 265

目录

1.数组(Array)

2.元组(Tuple)

3.容器 (Collections)

1.不可变容器

2.可变容器

3.并发容器

4.序列 (Sequence)

1.List 列表

2.Array

3.Vector

4.Range

5.String

5.集合(Set)

6.映射(Map)

7.迭代器(Iterator)

Scala 是一种面向对象的编程语言,支持基于类和对象的数据结构。Scala 中的数据结构包括数组、元组、列表、集合、序列和映射等,同时也提供了可变和不可变两种类型的数据结构。

1.数组(Array)

数组是一种最基本的数据结构,它可以存储一系列同一类型的元素。数组在 Scala 中是一个对象,使用时需要指定数组的类型和大小。数组的特点是可以随机访问元素,但是插入、删除操作需要移动其他元素,相对效率较低。

举例:定义一个包含 5 个整数的数组

val arr = Array(1, 2, 3, 4, 5) 2.元组(Tuple)

元组是一种不可变的序列,它可以包含不同类型的元素。元组的特点是可以用于返回多个值,且不需要定义新的类或对象,但是访问元素时需要使用 _{n} 标记。

举例:定义一个包含整数和字符串的元组

val tuple = (1, "two", 3, "four", 5) 3.容器 (Collections)

Scala 中的容器 (Collections) 可以根据使用方式、数据结构、修改方式等不同特点分为不同的类型。以下是 Scala 中常见的容器类型:

1.不可变容器

不可变容器是指容器创建后无法修改容器中的元素,常用的不可变容器有:

List: 有序集合,元素可以重复

Set: 无序集合,元素不能重复

Map: key-value 键值对集合,key 不能重复

下面是一个创建不可变 List、Set 和 Map 的例子:

// list val list = List(1, 2, 3) ​ // set val set = Set(1, 2, 2, 3) ​ // map val map = Map(1 -> "one", 2 -> "two", 3 -> "three") 2.可变容器

可变容器是指在容器创建后可以在任何时间添加或删除元素,常用的可变容器有:

ArrayBuffer: 类似 Java 中 ArrayList,支持快速随机访问元素

ListBuffer: 类似 Java 中 LinkedList,支持在头尾高效添加和删除元素

mutable.Map: 类似不可变 Map,但可以修改 key-value 键值对

下面是一个创建可变 ArrayBuffer、ListBuffer 和 mutable.Map 的例子:

import scala.collection.mutable ​ // array buffer val arrayBuffer = mutable.ArrayBuffer(1, 2, 3) ​ // list buffer val listBuffer = mutable.ListBuffer(1, 2, 3) listBuffer.prepend(0) // 在头部添加元素 listBuffer.append(4) // 在尾部添加元素 ​ // mutable map val mutableMap = mutable.Map(1 -> "one", 2 -> "two", 3 -> "three") mutableMap += (4 -> "four") // 添加键值对 mutableMap -= 1 // 删除键值对 3.并发容器

Scala 提供了一些并发容器,用于在多线程的情况下安全地修改容器中的元素。常用的并发容器有:

TrieMap: 支持并发修改的 Map

ConcurrentLinkedQueue: 支持并发访问的队列

下面是一个使用 TrieMap 进行并发修改的例子:

import scala.concurrent.{Future, Await} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ ​ val trieMap = concurrent.TrieMap[Int, String]() ​ // 在多个 Future 中并发修改 trieMap val futures = (1 to 10).map { i =>  Future {    trieMap += i -> ("value" + i)    Thread.sleep(100) // 模拟并发修改    trieMap.get(i) } } ​ // 打印 trieMap 的最终状态 Await.ready(Future.sequence(futures), 100.seconds).value.get.foreach(println)、 4.序列 (Sequence)

序列 (Sequence) 是一组按照特定顺序排列的数据元素,Scala 中常见的序列类型有:

1.List 列表

List 是一个不可变的序列,由一些有序的元素构成,元素可以重复。List 是 Scala 中最常用的序列类型之一,可以使用索引访问元素,并支持在头部添加和删除元素等操作。

下面是一个创建 List 和对 List 进行操作的例子:

val list = List(1, 2, 3, 4, 5) ​ // 访问元素 list(0) // 输出 1 ​ // 添加元素 val newList = 0 :: list // 在头部添加元素 newList :+ 6 // 在尾部添加元素 2.Array

Array 是一个可变的序列,由一些有序的元素构成,元素可以重复。Array 支持使用索引访问元素,并支持在任意位置插入和删除元素等操作。

下面是一个创建 Array 和对 Array 进行操作的例子:

val array = Array(1, 2, 3, 4, 5) ​ // 访问元素 array(0) // 输出 1 ​ // 插入元素 array(0) = 0 // 替换元素 array(3) = 6 // 指定位置插入元素 ​ // 删除元素 array(1) = 0 // 指定位置删除元素 3.Vector

Vector 是一个不可变的序列,由一些有序的元素构成,元素可以重复。Vector 可以支持在头部和尾部快速添加和删除元素,同时也支持修改任意位置的元素。

下面是一个创建 Vector 和对 Vector 进行操作的例子:

val vector = Vector(1, 2, 3, 4, 5) ​ // 访问元素 vector(0) // 输出 1 ​ // 添加元素 val newVector = 0 +: vector // 在头部添加元素 newVector :+ 6 // 在尾部添加元素 ​ // 修改元素 newVector.updated(1, -1) // 修改指定位置元素的值 4.Range

Range 是一种不可变的序列类型,表示连续的数字序列。Range 主要用于表示一些连续的数字集合,比如 1 到 10 这样的数字序列。

下面是一个创建 Range 和对 Range 进行遍历的例子:

// 生成一个连续的数字序列 val range = 1 to 10 // 遍历 Range 中的元素 for (i 1, "two" -> 2, "three" -> 3, "four" -> 4, "five" -> 5) 7.迭代器(Iterator)

迭代器是一个用于顺序访问元素的对象。Scala 中常常使用迭代器对集合进行遍历和操作。迭代器的特点是能够逐个访问集合中的元素,但是不能重复访问、不能修改集合中的元素。

举例:创建一个包含多个整数的集合,并使用迭代器遍历输出

val iterable = Iterable(1, 2, 3, 4, 5) val it = iterable.iterator while (it.hasNext) { println(it.next) }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3