Scala数据结构 |
您所在的位置:网站首页 › scala常用的容器类型 › Scala数据结构 |
目录 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.ArrayArray 是一个可变的序列,由一些有序的元素构成,元素可以重复。Array 支持使用索引访问元素,并支持在任意位置插入和删除元素等操作。 下面是一个创建 Array 和对 Array 进行操作的例子: val array = Array(1, 2, 3, 4, 5) // 访问元素 array(0) // 输出 1 // 插入元素 array(0) = 0 // 替换元素 array(3) = 6 // 指定位置插入元素 // 删除元素 array(1) = 0 // 指定位置删除元素 3.VectorVector 是一个不可变的序列,由一些有序的元素构成,元素可以重复。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.RangeRange 是一种不可变的序列类型,表示连续的数字序列。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 |