Scala编程_数组、列表、元组、集合与映射

简介:

Scala 是一种多范式编程语言,结合了面向对象编程和函数式编程的特性。它运行在 Java 虚拟机上,并且可以与 Java 代码无缝互操作。我主要记录一些我之前看过这本书的记录等。详细说一下Scala 中的一些基本数据结构,包括数组、列表、元组、集合和映射。

1. 数组(Array)

数组是 Scala 中最基本的数据结构之一,用于存储相同类型的元素。Scala 的数组是可变的,意味着修改数组中的元素。

创建数组

通过多种方式创建数组:

java 复制代码
val greetStrings = new Array[String](3)
greetStrings.update(0, "hello")
greetStrings.update(1, ",")
greetStrings.update(2, "world!!\n")

这里我们创建了一个长度为 3 的字符串数组,并使用 update 方法为数组赋值。Scala 中的数组索引从 0 开始。

访问数组元素

apply 方法来访问数组中的元素:

java 复制代码
for (i <- 0 to 2) {
  print(greetStrings.apply(i))
}

简洁方式创建和初始化数组:

java 复制代码
val greetS1 = Array("hello", ",", "world!!")
for (i <- 0.to(2)) {
  print(greetS1.apply(i))
}

数组的不可变性

虽然数组本身是可变的,但数组的长度是不可变的。一旦创建了一个数组,就不能改变它的大小。

2. 列表(List)

列表是 Scala 中另一种常用的数据结构,与数组不同,列表是不可变的。这意味着一旦创建了一个列表,就不能修改它的内容。

创建列表

使用 List 对象创建一个列表:

java 复制代码
val s1 = List(1, 2)
val s2 = List(3, 4)

列表的拼接

::: 操作符来拼接两个列表:

javascript 复制代码
val s3 = s1 ::: s2
println(s3)  // 输出: List(1, 2, 3, 4)

在列表前添加元素

使用 :: 操作符在列表的前面添加一个元素:

java 复制代码
val s4 = 1 :: s3
println(s4)  // 输出: List(1, 1, 2, 3, 4)

3. 元组(Tuple)

元组是 Scala 中用于存储不同类型元素的数据结构。与列表不同,元组是不可变的,并且可以存储不同类型的元素。

创建元组

使用圆括号来创建一个元组:

复制代码
val pari1 = (1, "22")

访问元组元素

使用 ._1._2 等方法来访问元组中的元素:

java 复制代码
println(pari1._1)  // 输出: 1
println(pari1._2)  // 输出: 22

4. 集合(Set)

集合是 Scala 中用于存储唯一元素的数据结构。Scala 提供了可变和不可变两种版本的集合。

创建可变集合

使用 mutable.Set 来创建一个可变集合:

java 复制代码
import scala.collection.mutable
val movieSet = mutable.Set("Li", "Wu")

添加元素

使用 += 操作符向可变集合中添加元素:

Scala 复制代码
movieSet += "love"
println(movieSet)  // 输出: Set(Li, Wu, love)

不可变集合

Scala 默认的集合是不可变的,无需引入任何包即可使用:

Scala 复制代码
val immutableSet = Set("apple", "banana")

5. 映射(Map)

映射是 Scala 中用于存储键值对的数据结构。Scala 提供了可变和不可变两种版本的映射。

创建可变映射

使用 mutable.Map 来创建一个可变映射:

Scala 复制代码
import scala.collection.mutable
val tmap = mutable.Map[Int, String]()
tmap += (1 -> "guangzhou")
tmap += (2 -> "beijing")
tmap += (3 -> "shenzheng")
println(tmap(3))  // 输出: shenzheng

创建不可变映射

Scala 默认的映射是不可变的,你无需引入任何包即可使用:

Scala 复制代码
val tiMap = Map(1 -> "hebei", 2 -> "chengde", 3 -> "shijiazhuang", 4 -> "beijing")
println(s"tiMap = ${tiMap}")  // 输出: tiMap = Map(1 -> hebei, 2 -> chengde, 3 -> shijiazhuang, 4 -> beijing)

以上就是我对这块知识点的总结,这是基础中的基础了。

IDEA里头的整体代码

自己拿着跑一跑吧

Scala 复制代码
package ScalaBiancheng

import java.util.Properties

/**
 * Scala
 */
object Scala01_1RuMen {
  def main(args: Array[String]): Unit = {


    val prop = new Properties()
    val num1 = Array("qwe", "qe", "eqe")
    val num2 = Array.apply("qwe", "qe", "eqe")

    /**
     * 用类型参数化数组 ARRAY
     * 数组:用户相同类型的对象的可变数组
     */
    val greetStrings = new Array[String](3)
    greetStrings.update(0, "hello")
    greetStrings.update(1, ",")
    greetStrings.update(2, "world!!\n")
    for (i <- 0 to 2) {
      print(greetStrings.apply(i))
    }

    val greetS1 = Array("hello", ",", "world!!")
    for (i <- 0.to(2)) {
      print(greetS1.apply(i))
    }


    /**
     * List 列表 不可变
     */
    val s1 = List(1, 2)
    val s2 = List(3, 4)
    val s3 = s1 ::: s2 // :::是list的一个方法,用来拼接
    println(s3)

    // :: 在前面添加一个元素
    val s4 = 1 :: s3
    println(s4)


    /**
     * 元组 不可变,但能存不同的元素,最多22个
     *
     */

    var pari1 = (1, "22")
    println(pari1._1)
    println(pari1._2)

    /**
     * 集合set
     * 分为可变集合和不可变集合,可变的引入包
     * += 定义在可变集合里面,
     */
    import scala.collection.mutable
    val movieSet = mutable.Set("Li", "Wu")
    movieSet += "love"

    println(movieSet)
    movieSet.+=("0819")
    println(movieSet)

    /**
     * map集合,Scala 也提供了 Map 的可变 和不可变的版本,用类继承关系来区分
     * 创建,初始化并使用一个可变的映射
     */
    import scala.collection.mutable
    val tmap = mutable.Map[Int, String]()
    tmap += (1 -> "guangzhou")
    tmap += (2 -> "beijing")
    tmap += (3 -> "shenzheng")
    println(tmap(3))
    //创建一个不可变映射,无需引入,因为默认的映射就是不可变的
    val tiMap = (1 -> "hebei", 2 -> "chengde", 3 -> "shijiazhuang", 4 -> "beijing")
    println(s"tiMap = ${tiMap}")


  }

}

运行结果:

参考

《Scala编程-第三版》

相关推荐
九溪弥烟、3 分钟前
python编写的一个打砖块小游戏
开发语言·python·pygame
stars19 分钟前
搞定python之三----序列、字典及集合
开发语言·python
Matrix7020 分钟前
Scala编程_实现Rational的基本操作
开发语言·python·scala
不爱学习的小枫24 分钟前
scala传递匿名函数简化的原则
scala
0wioiw027 分钟前
C++基础(VScode环境安装)
开发语言·c++
hhw19911229 分钟前
c#面试题整理7
开发语言·c#
Java&Develop33 分钟前
java项目springboot 项目启动不了解决方案
java·开发语言·spring boot
qq_2573795938 分钟前
python基础-字符串速查笔记
开发语言·笔记·python
一条闲鱼_mytube43 分钟前
golang recover错误
开发语言·后端·golang
Sean_summer43 分钟前
python语言总结(持续更新)
开发语言·python