已复制
全屏展示
复制代码

Scala集合类型使用整理


· 3 min read

一. Array

1.1 定长数组

    val array1 = new Array[Int](10)  // 固定大小为10,类型为Int
    val array2 = Array(1, 2, 3)      // 直接使用apply方法进行生成一个数组
    array1(1) = 10
    array1(2) = 20
    println(array1(0))  // 使用下标访问 0,没有写入时返回默认值0
    println(array1(1))  // 使用下标访问 10
    array2(3) = 33      // 索引超过最大值会报错

1.2 变长数组

    import scala.collection.mutable.{ArrayBuffer}

    val array3 = new ArrayBuffer[Int]()
    array3.append(20)
    val array4 =  ArrayBuffer[String]()
    array4.append("hello world")
    
    println(array3)
    println(array4)
    

二. List

2.1 不可变List

    var site: List[String] = List("Runoob", "Google", "Baidu")     // 字符串列表
    var nums: List[Int] = List(1, 2, 3, 4)                         // 整型列表
    var empty: List[String] = List()                               // 空列表
    var dim: List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0))  // 二维列表

    site = site :+ "a"  // 在末尾加入元素,注意 +: 和 :+ 的用法,+号靠近新加的元素
    site = "b" +: site  // 在开头加入元素,注意 +: 和 :+ 的用法,+号靠近新加的元素
    var site_nums = site ::: nums
    println(site_nums)  // 多个List合并 List(b, Runoob, Google, Baidu, a, 1, 2, 3, 4)

    println(site.head)  // 返回第一个元素 Runoob
    println(site.tail)  // 返回除第一个元素以外的所有值 List(Google, Baidu)
    println(site(0))    // 返回下标为0的元素
    println(site(1))    // 返回下标为1的元素

    for (elem <- site) {  // 遍历List
      println(elem)
    }
    

2.2 可变长List

import scala.collection.mutable.ListBuffer

val list = new ListBuffer[String]
list.append("hello")
list.append("world")
println(list.mkString(","))  // hello,world

三. Set

集是不重复元素的结合。集不保留顺序,默认是以哈希集实现。

3.1 不可变集

val set1 =Set("1","1","2","3")

println(set1.mkString(","))

3.2 可变集合

val set2 = Set(1, 2, 3)
set2.add(4)
val set3 = set2.+(6) // 使用.这个方法添加元素,会返回一个新的集合
println(set2.mkString(","))
println(set3.mkString(","))

四. Map

4.1 不可变映射

var map1 = Map("name" -> "zhangsan", "age" -> 18) // 创建
map1 = map1 + ("address" -> "地球") // 添加
map1 = map1 - ("address")  // 删除
println(map1)
println(map1.get("address"))

4.2 可变映射

val map2 = scala.collection.mutable.Map("name" -> "zhangsan", "age" -> 18)
map2("address") = "火星"  // 更新 或 新增
println(map2)
println(map2.get("address"))  // 获取

五. Tuple

Scala 中的元组包含一系列类:Tuple2,Tuple3等,直到 Tuple22。 因此,当我们创建一个包含 n 个元素(n 位于 2 和 22 之间)的元组时,Scala 基本上就是从上述的一组类中实例化 一个相对应的类,使用组成元素的类型进行参数化。

  • 用户有时可能在元组和 case 类之间难以选择。 通常,如果元素具有更多含义,则首选 case 类。
  • 元组一旦创建之后,就是不可变的
val tuple1 = ("hello", 1, 5.0)          // 创建元组

println(tuple1._1)                      // 访问元素,注意:下标从1开始
for (elem <- tuple1.productIterator) {  // 遍历元组
  println(elem)
}

val (name1, name2, name3) = tuple1      // 将元组多个元素赋值给多个变量

六. Iterator

val iterator = List(1, 2, "zhangsan").iterator
while (iterator.hasNext) {
  println(iterator.next())
}
🔗

文章推荐