【Scala】数组Array、列表List、集合Set、元组Tuple

左手的ㄟ右手 2023-06-14 04:13 32阅读 0赞

1、数组

数组可以用来存储固定大小的同一个类型的元素。定义之后可以通过下标来访问元素值,下标从0开始。

下面的代码定义了一个可以存放2个元素的 字符串数组(默认情况下会自动import 长度不可变化的数组),当给下标为2的元素赋值时会报错,因为越界了:

  1. scala> var x:Array[String] = new Array[String](2)
  2. x: Array[String] = Array(null, null)
  3. scala> x(0) = "scala"
  4. scala> x(1) = "java"
  5. scala> x(2) = "c++"
  6. java.lang.ArrayIndexOutOfBoundsException: 2
  7. ... 32 elided

下面在定义一个长度可变的数组(需要import 或者创建时指定),可以通过 +=来赋值,而且一次可以赋值多个:

  1. scala> var y = new scala.collection.mutable.ArrayBuffer[String]
  2. y: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()
  3. scala> y += "scala"
  4. res7: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(scala)
  5. scala> y += ("java","c++","javascript")
  6. res8: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(scala, java, c++, javascript)

2、列表

列表也是存放相同类型的元素,但是列表中元素的值时不可变的。

但是,另一方面由于列表有递归的结构,也就是链表结构,所以可以把多个列表合并成一个列表(列表又是可以扩展的),但是又没办法直接通过下标引用,来增加新的列表元素(会报错),可以通过:::操作符来合并多个LIst。

另外,列表最后可以加上 Nil表示列表的结尾 :

  1. scala> var x = List("scala","java","c++")
  2. x: List[String] = List(scala, java, c++)
  3. scala> var y = List("php","python")
  4. y: List[String] = List(php, python)
  5. scala> x(0)
  6. res15: String = scala
  7. scala> x(0)="linux"
  8. <console>:13: error: value update is not a member of List[String]
  9. x(0)="linux"
  10. ^
  11. scala> x= x:::y ::: List("linux","hadoop")
  12. x: List[String] = List(scala, java, c++, php, python, linux, hadoop)
  13. scala> x(7)="kafka"
  14. <console>:13: error: value update is not a member of List[String]
  15. x(7)="kafka"
  16. scala> x = x ::: Nil
  17. x: List[String] = List(scala, java, c++, php, python, linux, hadoop)

定义可变的List,通过+= 来增加列表元素,通过下标访问元素且重新赋值,也就是不仅能够动态扩展元素,而且还可以改变元素的值 :

  1. scala> var y = scala.collection.mutable.ListBuffer("php","python")
  2. y: scala.collection.mutable.ListBuffer[String] = ListBuffer(php, python)
  3. scala> y(0)
  4. res19: String = php
  5. scala> y(1)
  6. res20: String = python
  7. scala> y(2)
  8. java.lang.IndexOutOfBoundsException: 2
  9. at scala.collection.mutable.ListBuffer.apply(ListBuffer.scala:126)
  10. ... 32 elided
  11. ^
  12. scala> y += "Linux"
  13. res25: scala.collection.mutable.ListBuffer[String] = ListBuffer(php, python, Linux)
  14. scala> y(0)="php"
  15. scala> y(0)="flume"
  16. scala> y
  17. res29: scala.collection.mutable.ListBuffer[String] = ListBuffer(flume, python, Linux)

3、集合

和数组、列表不同的是:

(1)Set存放的值是唯一的,如果赋值的值有重复,会自动去重.

(2)Set可以存储不同类型的值,因为在创建集合的时候,不需要指定数据类型。

集合也分为 不可变集合 和 可变集合。

集合不能通过下标访问元素,通过exists 判断某个值是否在集合中存在,通过++ 来合并集合

  1. scala> var y = Set("php","python","php","scala")
  2. y: scala.collection.immutable.Set[String] = Set(php, python, scala)
  3. scala> y(0)
  4. <console>:13: error: type mismatch;
  5. found : Int(0)
  6. required: String
  7. y(0)
  8. ^
  9. scala> y.exists(_ == "php")
  10. res32: Boolean = true
  11. scala> y.head
  12. res34: String = php
  13. scala> y.tail
  14. res35: scala.collection.immutable.Set[String] = Set(python, scala)
  15. scala> y.isEmpty
  16. res36: Boolean = false
  17. scala> y ++ Set(123)
  18. res37: scala.collection.immutable.Set[Any] = Set(php, python, scala, 123)

定义可变Set:

  1. scala> var y = scala.collection.mutable.Set("php","python","php","scala")
  2. y: scala.collection.mutable.Set[String] = Set(python, php, scala)
  3. scala> y+= "123"
  4. res38: scala.collection.mutable.Set[String] = Set(python, 123, php, scala)

4、元组

元组也是不可变的,和集合类似,可以包含不同的元素。

支持的最大长度为22.

可以直接用括号来定义tuple,也可以用Tuple 后面加上元素个数来定义。

引用元素时 和数组不同,是加上 ._数字 , 数字从1开始而非0,通过 toString可以用逗号连接所有元素 :

  1. scala> var y = ("php","python",123)
  2. y: (String, String, Int) = (php,python,123)
  3. scala> var y = Tuple3("php","python",123)
  4. y: (String, String, Int) = (php,python,123)
  5. scala> var y = Tuple4("php","python",123,456)
  6. y: (String, String, Int, Int) = (php,python,123,456)
  7. scala> y(0)
  8. <console>:13: error: (String, String, Int, Int) does not take parameters
  9. y(0)
  10. ^
  11. scala> y._1
  12. res41: String = php
  13. scala> y._2
  14. res42: String = python
  15. scala> y._3
  16. res43: Int = 123
  17. scala> y._4
  18. res44: Int = 456
  19. scala> y.toString()
  20. res45: String = (php,python,123,456)

发表评论

表情:
评论列表 (有 0 条评论,32人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ScalaTuple

    元组的定义:与列表一样,与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。当定义的元组当中包含不同的数据类型,可看到返回值开始会包含其所对