Scala集合类型使用整理
一. 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())
}