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

1、数组

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

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

scala> var x:Array[String] = new Array[String](2)
x: Array[String] = Array(null, null)

scala> x(0) = "scala"

scala> x(1) = "java"

scala> x(2) = "c++"
java.lang.ArrayIndexOutOfBoundsException: 2
  ... 32 elided

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

scala> var y = new scala.collection.mutable.ArrayBuffer[String]
y: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()

scala> y += "scala"
res7: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(scala)

scala> y += ("java","c++","javascript")
res8: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(scala, java, c++, javascript)

2、列表

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

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

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

scala> var x = List("scala","java","c++")
x: List[String] = List(scala, java, c++)

scala> var y = List("php","python")
y: List[String] = List(php, python)

scala> x(0)
res15: String = scala

scala> x(0)="linux"
<console>:13: error: value update is not a member of List[String]
       x(0)="linux"
       ^

scala> x= x:::y ::: List("linux","hadoop")
x: List[String] = List(scala, java, c++, php, python, linux, hadoop)

scala> x(7)="kafka"
<console>:13: error: value update is not a member of List[String]
       x(7)="kafka"

scala> x = x ::: Nil
x: List[String] = List(scala, java, c++, php, python, linux, hadoop)

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

scala> var y = scala.collection.mutable.ListBuffer("php","python")
y: scala.collection.mutable.ListBuffer[String] = ListBuffer(php, python)

scala> y(0)
res19: String = php

scala> y(1)
res20: String = python

scala> y(2)
java.lang.IndexOutOfBoundsException: 2
  at scala.collection.mutable.ListBuffer.apply(ListBuffer.scala:126)
  ... 32 elided
             ^

scala> y += "Linux"
res25: scala.collection.mutable.ListBuffer[String] = ListBuffer(php, python, Linux)

scala> y(0)="php"

scala> y(0)="flume"

scala> y
res29: scala.collection.mutable.ListBuffer[String] = ListBuffer(flume, python, Linux)

3、集合

和数组、列表不同的是:

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

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

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

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

scala> var y = Set("php","python","php","scala")
y: scala.collection.immutable.Set[String] = Set(php, python, scala)

scala> y(0)
<console>:13: error: type mismatch;
 found   : Int(0)
 required: String
       y(0)
         ^

scala> y.exists(_ == "php")
res32: Boolean = true

scala> y.head
res34: String = php

scala> y.tail
res35: scala.collection.immutable.Set[String] = Set(python, scala)

scala> y.isEmpty
res36: Boolean = false

scala> y ++ Set(123)
res37: scala.collection.immutable.Set[Any] = Set(php, python, scala, 123)

定义可变Set:

scala> var y = scala.collection.mutable.Set("php","python","php","scala")
y: scala.collection.mutable.Set[String] = Set(python, php, scala)

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

4、元组

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

支持的最大长度为22.

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

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

scala> var y = ("php","python",123)
y: (String, String, Int) = (php,python,123)

scala> var y = Tuple3("php","python",123)
y: (String, String, Int) = (php,python,123)

scala> var y = Tuple4("php","python",123,456)
y: (String, String, Int, Int) = (php,python,123,456)

scala> y(0)
<console>:13: error: (String, String, Int, Int) does not take parameters
       y(0)
        ^

scala> y._1
res41: String = php

scala> y._2
res42: String = python

scala> y._3
res43: Int = 123

scala> y._4
res44: Int = 456

scala> y.toString()
res45: String = (php,python,123,456)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值