scala基础---数据结构

scala解释器:

REPL:Read(取值)> Evaluation(求值)-> Print(打印)>Loop(循环)。 scala解器也被称为REPL,会快速编译 scala代码为字节码,然后交给JM来执行。

1. 数据结构特点

Scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安全的并发访问。

两个主要的包:

不可变集合:scala.collection.immutable

可变集合: scala.collection.mutable

Scala优先采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本。

1.2 数组 Array

1) 定长数组

//定义 val arr1 = new Array[Int](10)

//赋值 arr1(1) = 7

//定义 val arr1 = Array(1, 2)

2) 变长数组

//定义 val arr2 = ArrayBuffer[Int]()

//追加值 arr2.append(7)

//重新赋值 arr2(0) = 7

3) 定长数组与变长数组的转换

arr1.toBuffer arr2.toArray

4) 多维数组

//定义 val arr3 = Array.ofDim[Double](3,4)

//赋值 arr3(1)(1) = 11.11

5) 与Java数组的相互转换

Scal数组转Java数组:

val arr4 = ArrayBuffer("1", "2", "3") //Scala to Java import scala.collection.JavaConversions.bufferAsJavaList val javaArr = new ProcessBuilder(arr4) println(javaArr.command())

Java数组转Scala数组:

import scala.collection.JavaConversions.asScalaBuffer import scala.collection.mutable.Buffer val scalaArr: Buffer[String] = javaArr.command() println(scalaArr)

6) 数组的遍历

for(x <- arr1) { println(x) }

1.3 元组 Tuple

元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据。

1) 元组的创建

val tuple1 = (1, 2, 3, "heiheihei") println(tuple1)

2) 元组数据的访问,注意元组元素的访问有下划线,并且访问下标从1开始,而不是0

val value1 = tuple1._4 println(value1)

3) 元组的遍历

方式1:

for (elem <- tuple1.productIterator) { print(elem) } println()

方式2:

tuple1.productIterator.foreach(i => println(i)) tuple1.productIterator.foreach(print(_))

1.4 列表 List

如果List列表为空,则使用Nil来表示。

1) 创建List

val list1 = List(1, 2) println(list1)

2) 访问List元素

val value1 = list1(1) println(value1)

3) List元素的追加

val list2 = list1 :+ 99 println(list2) val list3 = 100 +: list1 println(list3)

4) List的创建与追加,符号“::”,注意观察去掉Nil和不去掉Nil的区别

val list4 = 1 :: 2 :: 3 :: list1 :: Nil println(list4)

1.5 队列 Queue

队列数据存取符合先进先出策略

1) 队列的创建

import scala.collection.mutable val q1 = new mutable.Queue[Int] println(q1)

2) 队列元素的追加

q1 += 1; println(q1)

3) 向队列中追加List

q1 ++= List(2, 3, 4) println(q1)

4) 按照进入队列的顺序删除元素

q1.dequeue() println(q1)

5) 塞入数据

q1.enqueue(9, 8, 7) println(q1)

6) 返回队列的第一个元素

println(q1.head)

7) 返回队列最后一个元素

println(q1.last)

8) 返回除了第一个以外的元素

println(q1.tail)

1.6 映射 Map

这个地方的学习,就类比Java的map集合学习即可。

1) 构造不可变映射

val map1 = Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> 30)

2) 构造可变映射

val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> 30)

3) 空的映射

val map3 = new scala.collection.mutable.HashMap[String, Int]

4) 对偶元组

val map4 = Map(("Alice", 10), ("Bob", 20), ("Kotlin", 30))

5) 取值

如果映射中没有值,则会抛出异常,使用contains方法检查是否存在key。如果通过 映射.get(键) 这样的调用返回一个Option对象,要么是Some,要么是None。

val value1 = map1("Alice")

//建议使用get方法得到map中的元素

println(value1)

6) 更新值

map2("Alice") = 99

println(map2("Alice"))

或:

map2 += ("Bob" -> 99)

map2 -= ("Alice", "Kotlin")

println(map2)

或:

val map5 = map2 + ("AAA" -> 10, "BBB" -> 20)

println(map5)

7) 遍历

for ((k, v) <- map1) println(k + " is mapped to " + v)

for (v <- map1.keys) println(v)

for (v <- map1.values) println(v)

for(v <- map1) prinln(v)

1.7 集 Set

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

如果想要按照已排序的顺序来访问集中的元素,可以使用SortedSet(已排序数据集),已排序的数据集是用红黑树实现的。

默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。

1) Set不可变集合的创建

val set = Set(1, 2, 3) println(set)

2) Set可变集合的创建,如果import了可变集合,那么后续使用默认也是可变集合

import scala.collection.mutable.Set val mutableSet = Set(1, 2, 3)

3) 可变集合的元素添加

mutableSet.add(4) mutableSet += 6 // 注意该方法返回一个新的Set集合,而非在原有的基础上进行添加 mutableSet.+(5)

4) 可变集合的元素删除

mutableSet -= 1 mutableSet.remove(2) println(mutableSet)

5) 遍历

for(x <- mutableSet) { println(x) }

猜你喜欢

转载自blog.csdn.net/S_Running_snail/article/details/89022542
今日推荐