Scala--第三天

一、列表

  定义:是Scala中一种重要的容器

  特点:1.可以存储同类型重复数据

     2.是有序的(可以进行索引操作,有先来后到之分)

  分类:1.不可变列表:内容与长度均不可变

      2.可变列表:内容元素与长度均可变

  1.不可变列表

  定义:

 1     //第一种方式:List关键字 常用
 2     var l1 = List(1, 2, 3, 4)
 3     println(l1)
 4     //    List(1, 2, 3, 4)
 5     //创建一个空列表
 6     var l2 = Nil
 7     println(l2)
 8     //    List()
 9     //第二种方式: :: 符号 不常用
10     var l3 = 1 :: 2 :: Nil
11     println(l3)
12     //    List(1, 2)

  2.可变列表

  定义:需要先导入 ListBuffer

 import scala.collection.mutable.{ArrayBuffer, ListBuffer}
 1     // 定义带有初始化的可变列表
 2     var a = ListBuffer(1, 2, 3)
 3     println(a)
 4     //    ListBuffer(1, 2, 3)
 5     //定义一个空的可变列表
 6     var b = ListBuffer[Int]()
 7     println(b)
 8     //    ListBuffer()
 9 
10     //使用 += 进行添加操作
11     b += 1
12     b += 2
13     println(b)
14     //ListBuffer(1, 2)

  列表的常见操作

  1.查看列表的长度与元素

 1     var a = List(1, 2, 3)
 2     var b = ListBuffer(2, 3, 4)
 3     //查看列表的长度
 4     println(a.length)
 5     println(b.length)
 6     //结果
 7     //3
 8     //3
 9     //查看列表元素
10     println(a(0))
11     println(b(0))
12     //结果
13     //1
14     //2

  2.列表的添加与删除 ###注意 :只有可变的列表才有这些操作

 1     var a = List(1, 2, 3)
 2     var b = ListBuffer(2, 3, 4)
 3     //在可变列表后追加一个元素
 4     b += 5
 5     println(b)
 6     //结果
 7     //ListBuffer(2, 3, 4, 5)
 8     
 9     //在可变列表后,追加一个列表
10     b ++= a
11     println(b)
12     //结果
13     //ListBuffer(2, 3, 4, 5, 1, 2, 3)
14 
15     //可变列表删除指定的元素
16     b -= 2
17     println(b)
18     //结果  从结果看出来  删除的是第一个符合条件的元素
19     //ListBuffer(3, 4, 5, 1, 2, 3)

  3.可变列表转为不可变列表,列表为空的判断

 1     var a = List(1, 2, 3)
 2     var b = ListBuffer(2, 3, 4)
 3 
 4     //可变列表转换成不可变列表
 5     var c = b.toList
 6     println(c)
 7     //结果
 8     //List(2, 3, 4)
 9 
10     //判断列表是否为空
11     println(c.isEmpty)
12     //结果
13     //false

  4.列表的拼接

 1 //俩个不可变列表进行拼接,产生新的不可变列表,源列表保持不变
 2     var a = List(1, 2, 3)
 3     var b = List(4, 5)
 4     var c = a ++ b
 5     println(c)
 6     println(a)
 7     println(b)
 8     //结果
 9     //List(1, 2, 3, 4, 5)
10     //List(1, 2, 3)
11     //List(4, 5)
12 
13     //俩个可变的列表进行拼接 产生了一个新的可变列表,源列表保持不变
14     var d = ListBuffer(1, 2, 3)
15     var e = ListBuffer(4, 5)
16     var f = d ++ e
17     println(f)
18     println(d)
19     println(e)
20     //结果
21     //ListBuffer(1, 2, 3, 4, 5)
22     //ListBuffer(1, 2, 3)
23     //ListBuffer(4, 5)
24 
25     //一个不可变 和一个可变列表进行拼接
26     var x = List(1, 2, 3)
27     var y = ListBuffer(4, 5, 6)
28     var z1 = x ++ y
29     var z2 = y ++ x
30     println(z1)
31     println(z2)
32     //结果 最后的类型 由 拼接前者的类型决定
33     //List(1, 2, 3, 4, 5, 6)
34     //ListBuffer(4, 5, 6, 1, 2, 3)

  5.其他常用操作

 1      var a = List(1,2,3,4)
 2 
 3       //取列表头和尾
 4       println(a.head)
 5       println(a.tail)
 6       //结果
 7       //1
 8       //List(2, 3, 4)
 9      
10      //前缀,后缀 返回的依旧是列表
11      println(a.take(3))
12      println(a.drop(3))
13      //结果
14      //List(1, 2, 3)
15      //List(4)   

  6.扁平化/压平处理 (降维)

1     var a = List(List(1, 2, 3), List(4, 5))
2     var b= a.flatten
3     println(b)
4     //List(1, 2, 3, 4, 5)

  7.拉链,拉开

 1     var a = List("ss", "vv")
 2     var b = List(1, 2)
 3     var c = a.zip(b)
 4     println(c)
 5     //结果 打包成一个由元组组成的列表
 6     //List((ss,1), (vv,2))
 7 
 8     //访问列表c的第一个元素的子元素
 9     println(c(0)._1)
10     //结果
11     //ss
12 
13     //解包
14     var d =c.unzip
15     println(d)
16     //结果  解包成一个由列表组成的元组
17     //(List(ss, vv),List(1, 2))

  8.列表转字符串,拼接字符串(类似python中的join)

 1     //列表转字符串
 2     var a = List(1, 2, 3)
 3     println(a.toString)
 4     println(a.toString.getClass)
 5     //结果
 6     //List(1, 2, 3)
 7     //class java.lang.String
 8     
 9     //列表拼接字符串
10     var b = a.mkString("-")
11     println(b)
12     //结果
13     //1-2-3

  9.并集,交集,差集

 1     var a = List(1, 2, 3, 4)
 2     var b = List(3, 4, 5, 6)
 3     
 4     //并集
 5     var c = a.union(b)
 6     println(c)
 7     //List(1, 2, 3, 4, 3, 4, 5, 6)
 8     
 9     //交集
10     var d = a.intersect(b)
11     println(d)
12     //List(3, 4)
13     
14     //差集
15     var e = a diff b
16     println(e)
17     //List(1, 2)

二、集合

  特性:

    1.元素不重复

    2.无序

  分类:

    1.不可变集合

    2.可变集合

  注意:无论是不可变集合还是可变集合,都符合 集合俩个特性

  1.不可变集合

    定义

 1     //方式一:简单常用,会自动去重
 2     var s1 = Set(1, 2, 3, 4, 4)
 3     println(s1)
 4     //Set(1, 2, 3, 4)
 5     
 6     //方式二:注意()里面的是元素,而非集合的个数
 7     var s2 = Set[Int](1, 2)
 8     println(s2)
 9     //Set(1, 2)
10     
11     //空集合
12     var s3 = Set()
13     print(s3)
14     //Set()

    基本操作

 1     var s1 = Set(1, 2, 3, 4)
 2     //查看集合的长度
 3     println(s1.size)
 4     //4
 5 
 6     //遍历集合
 7     for (i <- s1) println(i)
 8     //1
 9     //2
10     //3
11     //4
12 
13     //删除集合的指定元素,原集合不变,生成一个新的集合
14     var s2 = s1 - 1
15     println(s1)
16     //Set(1, 2, 3, 4)
17     println(s2)
18     //Set(2, 3, 4)
19 
20     //拼接 注意:保证俩个集合的类型相同
21     var s3 = s1 ++ s2
22     println(s3)
23     //Set(1, 2, 3, 4)
24 
25     //集合和列表拼接,但是不能和元组拼接,因为元组不可变
26     println(s1 ++ List(5, 6))
27     //Set(5, 1, 6, 2, 3, 4)
28 
29     //集合 转list  无序变有序
30     println(s1.toList)
31     //List(1, 2, 3, 4)

  2.可变集合

 1     //方式一:()里面的是元素
 2     var s1 = Set[Int](1, 2)
 3     println(s1)
 4     //Set(1, 2)
 5     //添加元素
 6     s1 += 3
 7     println(s1)
 8     //Set(1, 2, 3)
 9     //方式二:常用
10     var s2 = Set(1, 2, 4, 5)
11     println(s2)
12     //Set(1, 5, 2, 4)

  基本操作

 1     var s = Set(1, 2, 3, 4)
 2     s += 5
 3     println(s)
 4     s -= 1
 5     println(s)
 6     s ++= Set(6)
 7     println(s)
 8     //Set(1, 5, 2, 3, 4)
 9     //Set(5, 2, 3, 4)
10     //Set(5, 2, 6, 3, 4)

三、映射Map

  分类:不可变映射;可变映射

  1.不可变映射

    定义:

1     //方式一
2     var m1 = Map("k1" -> 1, "k2" -> 2)
3     println(m1)
4     //Map(k1 -> 1, k2 -> 2)
5 
6     //方式二
7     var m2 = Map(("k1", "1"), ("k2", "2"))
8     println(m2)
9     //Map(k1 -> 1, k2 -> 2)

  2.可变映射

    定义方式与不可变相同,唯一的区别在于关键字需要导入

    import scala.collection.mutable.Map

  3.Map常规操作

 1     var m1 = Map(("k1", 1), ("k2", 2))
 2     //取值
 3     println(m1("k1"))
 4     //1
 5 
 6     //获取全部的key值 返回一个迭代器
 7     var a = m1.keys
 8     println(a)
 9     for (i <- a) println(i)
10     //Set(k1, k2)
11     //k1
12     //k2
13 
14     //获取全部的value值,返回一个迭代器
15     var b = m1.values
16     println(b)
17     //MapLike(1, 2)
18 
19     //遍历映射
20     for ((k, v) <- m1) {
21       println(s"${k}:${v}")
22     }
23     //k1:1
24     //k2:2
25 
26     //取值 没有的话给一个默认值
27     println(m1.getOrElse("k4", 4))
28     //4

   4.Map添加元素,删除元素

 1     var m1 = Map(("k1", 1), ("k2", 2))
 2     //添加元素  元素 需要用()括起来
 3     var m2 = m1 + ("k3" -> 3)
 4     m2.foreach(println(_))
 5     //删除元素 直接 - key值即可
 6     var m3 = m1 - "k1"
 7     println("-------")
 8     m3.foreach(println(_))
 9     //结果
10     //(k2,2)
11     //(k1,1)
12     //(k3,3)
13     //-------
14     //(k2,2)

  

原文地址:https://www.cnblogs.com/cmxbky1314/p/12268472.html