元组(tuple)类似Java中的集合,可以放入不同类型的数据,元组最多存放22个数据
把无关的对象变成一个整体
例如:val t1:(String,Int,Double,boolean) = ("abc",123,23.6,true),这个元素的类型就是(String,Int,Double,boolean)
//元组
object TupleDemo1 {
def main(args: Array[String]): Unit = {
//1. 创建元组
val t1 = ("a",1,"2",3.4,true)
println(t1)
println("_________")
//2. 访问元组中的数据_1、_2、...
println(t1._1)
println(t1._3)
println("_________")
//3. 遍历元组
for(ele <- t1.productIterator){
println(ele)
}
}
}
打印结果
(a,1,2,3.4,true)
_________
a
2
_________
a
1
2
3.4
true
java中的List是一个集合接口,真正存放数据用的是ArrayList,对标scala中的变长数组ArrayBuffer;
scala中的List是列表,可以直接存放数据,默认不可变
ListBuffer是可变列表
特点:有序、可重复、增删快、查询慢
//列表List
object ListDemo1 {
def main(args: Array[String]): Unit = {
//1. 创建列表——方式1
val list1 = List(10, 20, 30, 40)
//创建列表——方法2:需要在最后加Nil
val list2: List[Int] = 10 :: 20 :: 30 :: 40 :: 50 :: Nil
println("list1: "+ list1)
println("list2: "+ list2)
println("___________")
//2. 访问List中的元素
println(list1(0))
println(list2(1))
println("___________")
//3. 向列表尾部追加元素,追加符号:+
//追加完后生成新List
val list3 = list1 :+ 60 :+ 70
println("list3: "+ list3)
println("list1: "+ list1)
println("___________")
//4. 向列表头部追加元素,追加符号+:
val list4 = 60 +: 70 +: list1
println("list4: "+ list4)
println("list1: "+ list1)
println("___________")
//5. 连接两个列表,:::和++
println(list1 ::: list2)
println(list1 ++ list2)
}
}
打印结果
list1: List(10, 20, 30, 40)
list2: List(10, 20, 30, 40, 50)
___________
10
20
___________
list3: List(10, 20, 30, 40, 60, 70)
list1: List(10, 20, 30, 40)
___________
list4: List(60, 70, 10, 20, 30, 40)
list1: List(10, 20, 30, 40)
___________
List(10, 20, 30, 40, 10, 20, 30, 40, 50)
List(10, 20, 30, 40, 10, 20, 30, 40, 50)
从结果可以看出List是有序的,并且增删后会生成新List,原List不变
scala中Set的特点:元素无序、不重复,增删慢、查询快;默认以hash集的形式实现
分为可变的Set和不可变的Set,默认是不可变Set
写可变的Set需要导包import scala.collection.mutable;Set集合修改后原集合会发生改变
import scala.collection.mutable
object SetDemo1 {
def main(args: Array[String]): Unit = {
//1. 创建一个不可变Set
val set1 = Set(10, 2, 5, 9, "a", "bb")
println(set1)
//2. 创建一个可变的Set,需要导包mutable
val set2 = mutable.Set("a", 1, "b")
println(set2)
println("________________")
//3. 可变Set元素的增加和删除,修改后原Set会改变(不可变Set无法修改)
//(1)增加元素,+=
set2 += "abc"
println(set2)
//(2)删除元素,-=
set2 -= "a"
println(set2)
println("________________")
val set3 = set2.+("abcd")
println(set3)
println(set2)
}
}
打印结果
Set(5, 10, a, 9, 2, bb)
Set(1, a, b)
________________
Set(1, abc, a, b)
Set(1, abc, b)
________________
Set(abcd, 1, abc, b)
Set(1, abc, b)
从结果上可以看出,Set是无序的,并且增删后原集合会发生改变
队列是一个有序列表,底层是用数组或链表实现;
与Tuple、List、Set的区别是,队列数据输入和输出遵循先入先出原则,即先存入的数据先取出,后存入的数据后取出
创建Queue需要导包import scala.collection.mutable
import scala.collection.mutable
//队列
object QueueDemo1 {
def main(args: Array[String]): Unit = {
//1. 创建空队列
val queue1 = new mutable.Queue[Int]
//2. 创建队列,并初始化两个元素
val queue2 = mutable.Queue(10, 20)
println(queue1)
println(queue2)
println("________________")
//3. 添加一个元素 +=
queue1 += 1
queue1 += 2
queue1 += (3, 4)
println(queue1)
//4. 添加List列表 ++=
queue1 ++= List(1, 2, 3, 4)
println(queue1)
//5. 添加Array数组 ++=
queue1 ++= Array(1, 20, 30)
println(queue1)
println("________________")
//6. 添加元素,使用enqueue
queue1.enqueue(100, 200)
println(queue1)
//7. 删除队列中第一个元素,使用dequeue
queue1.dequeue()
println(queue1)
println("________________")
//8. 返回队列头部元素head
println("queue1.head= " + queue1.head)
//9. 返回队列中除头元素外的所有元素tail
println("queue1.tail= " + queue1.tail)
}
}
打印结果
Queue()
Queue(10, 20)
________________
Queue(1, 2, 3, 4)
Queue(1, 2, 3, 4, 1, 2, 3, 4)
Queue(1, 2, 3, 4, 1, 2, 3, 4, 1, 20, 30)
________________
Queue(1, 2, 3, 4, 1, 2, 3, 4, 1, 20, 30, 100, 200)
Queue(2, 3, 4, 1, 2, 3, 4, 1, 20, 30, 100, 200)
________________
queue1.head= 2
queue1.tail= Queue(3, 4, 1, 2, 3, 4, 1, 20, 30, 100, 200)
Scala中Map映射存储的是key-value键值对,不可变Map是有序的,可变Map是无序的
Map里的元素是(key,value)以元组的形式存在
//映射Map
object MapDemo1 {
def main(args: Array[String]): Unit = {
//1. 创建不可变Map
val map1 = Map("A" -> 50, "B" -> 100, "C" -> 200)
//遍历
for (elem <- map1) {
println(elem) //遍历的每个元素都是一个元组
println(elem._1)
}
println("____________")
//2. 创建可变Map
import scala.collection.mutable
val map2 = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
//遍历
for (elem <- map2) {
println(elem)
println(elem._2)
}
}
}
打印结果
(A,50)
A
(B,100)
B
(C,200)
C
____________
(b,2)
2
(a,1)
1
(c,3)
3
从打印结果可以看出,不可变Map是有序的,输出顺序和元素的声明顺序一致;可变Map是无序的
//Map中通过key查找value
object MapDemo2 {
def main(args: Array[String]): Unit = {
val map1 = mutable.Map("a" -> 1, "b" -> 2, "c" -> 3)
//1. map("key")获取key对应的value,没有对应的key会报错
println(map1("a"))
//取值前判断key是否存在
if (map1.contains("d")) {
println(map1("d"))
} else {
println("查找的key不在")
}
println("_________________")
//2. get("key"),返回的是Some(value),需要用.get获取value
val v1 = map1.get("b")
val v2 = map1.get("d")
println(v1)
println(v1.get)
println(v2)
println("_________________")
//3. getOrElse,若存在key返回对应value值,若不存在key返回设定的默认值
val i1 = map1.getOrElse("a", 100)
val i2 = map1.getOrElse("d", 200)
println(i1)
println(i2)
}
}
打印结果
1
查找的key不在
_________________
Some(2)
2
None
_________________
1
200