第一章.集合

1.不可变数组的创建

  1. package com.atguigu.chapter07
  2. object $01_ImmutableArray {
  3. /**
  4. * 不可变数组的创建(不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改)
  5. * 1.通过new的方式: new Array[元素类型](数组长度)
  6. * 2.通过apply方法: Array[元素类型](初始元素,....)
  7. *
  8. * 集合添加,删除的通用方法的区别
  9. * a.带+与带-的区别:
  10. * 带+是添加元素
  11. * 带-是删除元素
  12. * b.一个+/-与两个+/-的区别
  13. * 一个+/-是添加/删除单个元素
  14. * 两个+/-是添加/删除一个指定集合中的所有元素
  15. * c.冒号在前与冒号在后以及不带冒号的区别
  16. * 冒号在前是将元素添加到集合最后面
  17. * 冒号在后是将元素添加到集合最前面
  18. * 不带冒号将元素添加到集合最后面
  19. * d.带=与不带=的区别
  20. * 带=是修改集合本身
  21. * 不带=是生成新集合,原集合没有改变
  22. * e.updated与update的区别
  23. * updated是生成一个新集合
  24. * update是修改原集合
  25. */
  26. def main(args:Array[String]):Unit={
  27. //1.通过new的方式:new Array[元素类型](数组长度)
  28. val arr = new Array[Int](5)
  29. println(arr.toList)
  30. //2.通过apply方法:Array[元素类型](初始元素 )
  31. val arr2 = Array[Int](10,2,3,6,5)
  32. println(arr2.toList)
  33. //添加元素
  34. //添加单个元素
  35. val arr3 = arr2.:+(20)
  36. println(arr2.toList)
  37. println(arr3.toList)
  38. println(arr2.eq(arr3))
  39. //添加一个集合所有元素
  40. val arr5 = arr2.++(Array(100, 300, 200))
  41. println(arr5.toList)
  42. println(arr2.toList)
  43. val arr6 = arr2.++:(Array(500, 700, 200))
  44. println(arr6.toList)
  45. //删除元素
  46. //获取元素
  47. println(arr6(0))
  48. //修改元素
  49. arr6(0) = 1000
  50. println(arr6.toList)
  51. //遍历
  52. for (elem <- arr6) {
  53. println(elem)
  54. }
  55. //不可变转可变
  56. val arr7 = arr6.toBuffer
  57. println(arr7)
  58. }
  59. }

2.可变数组的创建

  1. package com.atguigu.chapter07
  2. import scala.collection.mutable.ArrayBuffer
  3. object $02_MutableArray {
  4. /**
  5. * 创建可变数组(可变数组,就是这个集合可以直接对原对象进行修改,而不会返回新的对象)
  6. * 1.通过new方式: new ArrayBuffer[元素类型]()
  7. * 2.通过apply方法: ArrayBuffer[元素类型](初始元素,...)
  8. */
  9. def main(args: Array[String]): Unit = {
  10. //1.通过new的方式: new ArrayBuffer[元素类型]()
  11. val arr = new ArrayBuffer[Int]()
  12. println(arr)
  13. //2.通过apply方法:ArrayBuffer[元素类型](初始元素,....)
  14. val arr2 = ArrayBuffer[Int](10, 2, 5, 3, 7, 9)
  15. println(arr2)
  16. //添加元素
  17. val arr3 = arr2.+:(20)
  18. println(arr2)
  19. println(arr3)
  20. val arr4 = arr2.:+(30)
  21. println(arr4)
  22. arr2.+=(40)
  23. println(arr2)
  24. arr2.+=:(50)
  25. println(arr2)
  26. val arr5 = arr2.++(Array(100, 200, 300))
  27. println(arr5)
  28. println(arr2)
  29. val arr6 = arr2.++:(Array(400, 500, 600))
  30. println(arr6)
  31. arr2.++=(Array(100,250,305,305))
  32. println(arr2)
  33. arr2.++=:(Array(505,605,705))
  34. println(arr2)
  35. //删除
  36. val arr7 = arr2.-(305)
  37. println(arr2)
  38. println(arr7)
  39. arr2.-=(305)
  40. println(arr2)
  41. arr2.--=(Array(605,50,10,2))
  42. println(arr2)
  43. //获取元素
  44. println(arr2(0))
  45. //修改元素
  46. arr2(0)=1000
  47. println(arr2)
  48. //遍历
  49. for (elem <- arr2) {
  50. println(s"elem=${elem}")
  51. }
  52. //可变转不可变
  53. val arr10 = arr2.toArray
  54. println(arr10.toList)
  55. //多维数组
  56. val arr11 = Array.ofDim[Int](3, 4)
  57. println(arr11.size)
  58. println(arr11(0).size)
  59. }
  60. }

3.不可变List创建

  1. package com.atguigu.chapter07
  2. object $03_ImmutableList {
  3. /**
  4. * 不可变List创建
  5. * 1.通过apply方法: List[元素类型]{初始元素,.....}
  6. * 2.通过::方法创建: 初始元素::初始元素::...::Nil/不可变List
  7. * Nil就是空的不可变List,Nil与不可变List关系类似Null与String的关系,Nil一般用于给不可变list赋予初始值,在赋予初始值的
  8. * 时候必须定义变量类型
  9. * 添加元素:
  10. * ::是添加单个元素,是生成一个新集合,原集合没有改变
  11. * :::是添加一个集合所有元素,是生成一个新集合,原集合没有改变
  12. *
  13. */
  14. def main(args: Array[String]): Unit = {
  15. //1.通过apply方法:List[元素类型](初始元素)
  16. val list1 = List[Int](1, 4, 3, 2, 7, 9)
  17. println(list1)
  18. //2.通过::方法创建:初始元素::初始元素::...::Nil/不可变List
  19. val list2 = 1 :: 2::3::6::Nil
  20. println(list2)
  21. var list3:List[Int]=Nil
  22. println(list3)
  23. //添加元素
  24. val list4 = list2.:+(10)
  25. println(list4)
  26. val list5 = list2.+:(20)
  27. println(list5)
  28. val list6 = list2.::(30)
  29. println(list6)
  30. val list7 = list2.++(Array(100, 300, 200))
  31. println(list7)
  32. val list8 = list2.++:(List(100, 300, 200))
  33. println(list8)
  34. val list9 = list2.:::(List(5050, 405))
  35. println(list9)
  36. //删除元素
  37. //获取元素
  38. println(list9(0))
  39. //修改元素
  40. //list9(0)=1000
  41. //println(list9)
  42. val list10 = list9.updated(0, 1000)
  43. println(list10)
  44. }
  45. }

4.可变List创建

  1. package com.atguigu.chapter07
  2. import scala.collection.mutable.ListBuffer
  3. object $04_MutableList {
  4. /**
  5. * 可变List 的创建
  6. * 1.通过apply方法: ListBuffer[元素类型](初始元素)
  7. * 2.通过new方式
  8. */
  9. def main(args: Array[String]): Unit = {
  10. //1.通过apply方法:ListBuffer[元素类型](初始元素,....)
  11. val list1 = ListBuffer[Int](1,4,2,7,9)
  12. println(list1)
  13. //2.通过new方式: new ListBuffer[元素类型]()
  14. val list2 = new ListBuffer[Int]()
  15. println(list2)
  16. //添加元素
  17. val list3 = list1.+:(10)
  18. println(list3)
  19. val list4 = list1.:+(20)
  20. println(list4)
  21. list1.+=(40)
  22. println(list1)
  23. list1.+=:(50)
  24. println(list1)
  25. //在指定角标位置插入元素
  26. list1.insert(1,10,20,30)
  27. println(list1)
  28. //删除元素
  29. list1.remove(1,3)
  30. println(list1)
  31. val list5 = list1.-(50)
  32. println(list5)
  33. list1.-=(50)
  34. println(list1)
  35. val list6 = list1.--(List(1,2,7))
  36. println(list6)
  37. println(list1)
  38. list1.--=(List(1,2,7))
  39. println(list1)
  40. //获取元素
  41. println(list1(0))
  42. //修改元素
  43. list1(0)=100
  44. println(list1)
  45. list1.update(1,90)
  46. println(list1)
  47. val list11 = list1.updated(2,4)
  48. println(list1)
  49. println(list11)
  50. }
  51. }

5.不可变set创建

  1. package com.atguigu.chapter07
  2. object $05_ImmutableSet {
  3. /**
  4. * 不可变set的创建
  5. * 通过apply方法: Set[元素类型](初始元素,...)
  6. * set的特性:不重复,无序
  7. */
  8. def main(args: Array[String]): Unit = {
  9. //通过apply方法:Set[元素类型](初始元素,....)
  10. val set1= Set[Int](1,2,5,3,1,9,10)
  11. println(set1)
  12. //添加元素
  13. val set2 = set1.+(20)
  14. println(set2)
  15. val set3 = set1.++(List(100,300,200,700))
  16. val set4 = set1.++(List(100,300,200,700))
  17. println(set3)
  18. println(set4)
  19. var set10 = Set[Int](1,3,5,7,9)
  20. val set11 = set10
  21. println("-------------------------------")
  22. set10.+=(20)
  23. set10=set10.+(20)
  24. println(set10)
  25. println(set11.eq(set10))
  26. //删除元素
  27. val set5 = set1.-(10)
  28. println(set5)
  29. val set6 = set1.--(List(2,3,5))
  30. println(set6)
  31. }
  32. }

6.可变set的创建

  1. package com.atguigu.chapter07
  2. import scala.collection.mutable
  3. object $06_MutableSet {
  4. /**
  5. * 可变set的创建:
  6. * 通过apply方法的创建: mutable.Set[元素类型](初始元素,....)
  7. */
  8. def main(args: Array[String]): Unit = {
  9. //通过apply方法创建:mutable.Set[元素类型](初始元素,....)
  10. val set1 = mutable.Set[Int](10,20,30,40)
  11. //添加元素
  12. val set2 = set1.+(50)
  13. println(set2)
  14. set1.+=(60)
  15. println(set1)
  16. val set3 = set1.++(List(70,100,300,80))
  17. println(set3)
  18. val set4 = set1.++:(List(70,100,300,80))
  19. println(set4)
  20. set1.++=(List(500,700,200,300))
  21. println(set1)
  22. //删除元素
  23. val set6 = set1.-(60)
  24. println(set6)
  25. set1.-=(700)
  26. println(set1)
  27. set1.--=(List(500,200,300))
  28. println(set1)
  29. //获取元素
  30. //修改元素
  31. set1.update(500,true)
  32. println(set1)
  33. set1.update(60,false)
  34. println(set1)
  35. }
  36. }

7.元组

  1. package com.atguigu.chapter07
  2. object $07_Tuple {
  3. /**
  4. * 元组的创建:
  5. * 1.通过()创建:(初始元素,初始元素,....)
  6. * 2.针对二元元组:K-> V
  7. * scala中二元元组表示KV键值对
  8. * 元组最多只能存放22个元素
  9. * 元组一旦创建,元素和长度都不可改变
  10. * 元组获取元素:元组名._角标[元组的角标从1开始]
  11. */
  12. class Region(val name:String,val school:School)
  13. class School(val name:String,val student:Student)
  14. class Student(val name:String,val age:Int)
  15. def main(args: Array[String]): Unit = {
  16. //通过()创建:(初始元素,初始元素,....)
  17. val t1 = ("zhangsan",20,"shenzhen")
  18. val t2 = "lisi" -> 20
  19. println(t1)
  20. println(t2)
  21. println(t1._1)
  22. println(t1._2)
  23. println(t1._3)
  24. println("---------------------------")
  25. val list = List("1 zhangsan 20 shenzhen","2 lisi 30 beijing","3 wangwu 40 tianjin")
  26. val list2 = for(element<-list) yield {
  27. val arr = element.split(" ")
  28. (arr(0),arr(1),arr(2),arr(3))
  29. }
  30. println(list2)
  31. val list3 = List(
  32. new Region("宝安区1",new School("宝安中学1",new Student("张三1",21))),
  33. new Region("宝安区2",new School("宝安中学2",new Student("张三2",22))),
  34. new Region("宝安区3",new School("宝安中学3",new Student("张三3",23))),
  35. new Region("宝安区4",new School("宝安中学4",new Student("张三4",24)))
  36. )
  37. val list4 = for (elem <- list3) yield{
  38. (elem.name,(elem.school.name,(elem.school.student.name,elem.school.student.age)))
  39. }
  40. for (elem <- list4) {
  41. println(elem._2._2._1)
  42. }
  43. }
  44. }

8.不可变map的创建

  1. package com.atguigu.chapter07
  2. object $08_ImmutableMap {
  3. /**
  4. * 不可变map的创建:
  5. * 通过apply方法: Map[k的类型,v的类型]((K,V), K->V)
  6. * map获取value的值:getOrElse(key,默认值) [key如果在map中存在则返回value值,如果不存在则返回默认值]
  7. * Option:提醒外部当前结果有可能为空需要处理
  8. * Some:代表有值
  9. * None:代表为空
  10. */
  11. def main(args: Array[String]): Unit = {
  12. //通过apply方法:Map[K的类型,V的类型]((K,V),K->V)
  13. val map = Map[String,Int]("zhangsan"->20,("lisi",30),"wangwu"->22)
  14. println(map)
  15. //添加元素
  16. val map2 = map.+("aa" -> 20)
  17. println(map2)
  18. val map3 = map.++(List("cc"->30,"ac"->40,"dc"->50))
  19. println(map3)
  20. val map4 = map.++:(List("cc"->30,"ac"->40,"dc"->50))
  21. println(map4)
  22. //删除元素
  23. val map5 = map.-("lisi")
  24. println(map5)
  25. val map6 = map4.--(List("dc","cc","ac"))
  26. println(map6)
  27. //修改元素
  28. val map7 = map.+("zhangsan"->200)
  29. println(map7)
  30. //map("zhangsan")=1000
  31. //println(map)
  32. val map8 = map.updated("lisi",1000)
  33. println(map8)
  34. //获取元素
  35. // println(map("lisi_1"))
  36. println(map.get("lisi").get)
  37. //println(map.get("lisi_1"))
  38. println(map.getOrElse("lisi_1", -1))
  39. //获取所有的key
  40. println(map.keySet)
  41. //获取所有的value
  42. println(map.values)
  43. for (elem <- map) {
  44. println(elem)
  45. }
  46. }
  47. }

9.可变map的创建

  1. package com.atguigu.chapter07
  2. import scala.collection.mutable
  3. object $09_MutableMap {
  4. /**
  5. * 可变Map的创建: mutable.Map[K的类型,V的类型](K->V,(K,V),...)
  6. */
  7. def main(args: Array[String]): Unit = {
  8. val map = mutable.Map[String, Int]("aa" -> 10, "cc" -> 20, "dd" -> 30, "ac" -> 40)
  9. println(map)
  10. //添加元素
  11. val map2 = map.+("tt"->60)
  12. println(map2)
  13. map.+=("pp"->70)
  14. println(map)
  15. val map3 = map.++(List("cd"->100,"ce"->200,"fc"->300))
  16. println(map3)
  17. val map4 = map.++:(List("cd"->100,"ce"->200,"fc"->300))
  18. println(map4)
  19. map.++=(List("yy"->20,"oo"->30))
  20. println(map)
  21. map.put("hello",30)
  22. println(map)
  23. //删除元素
  24. val map5 = map.-("hello")
  25. println(map5)
  26. map.-=("oo")
  27. println(map)
  28. val map6 = map.--(List("yy","dd","hello"))
  29. println(map6)
  30. map.--=(List("pp","cc","hello"))
  31. println(map)
  32. map.remove("yy")
  33. println(map)
  34. //获取元素
  35. println(map.getOrElse("dd", -1))
  36. println(map.keys)
  37. println(map.values)
  38. //修改元素
  39. map("dc")=300
  40. println(map)
  41. map.update("pp",100)
  42. println(map)
  43. }
  44. }

10.不可变队列的创建

  1. package com.atguigu.chapter07
  2. import scala.collection.immutable.Queue
  3. object $10_ImmutableQuene {
  4. //不可变队列的创建: Queue[元素类型](初始元素,...)
  5. def main(args: Array[String]): Unit = {
  6. //创建队列
  7. val queue = Queue[Int](10,3,2,6,8,9)
  8. println(queue)
  9. //添加元素
  10. val queue2 = queue.+:(20)
  11. println(queue2)
  12. val queue3 = queue.:+(20)
  13. println(queue3)
  14. val queue4 = queue.++(List(100,200,400,300))
  15. println(queue4)
  16. val queue5 = queue.++:(List(100,200,400,300))
  17. println(queue5)
  18. val queue6 = queue.enqueue(50)
  19. println(queue6)
  20. //删除元素
  21. val queue7 = queue.dequeue
  22. println(queue7)
  23. //获取元素
  24. println(queue(0))
  25. //修改元素
  26. val queue10 = queue.updated(1,100)
  27. println(queue10)
  28. }
  29. }

11.可变队列的创建

  1. package com.atguigu.chapter07
  2. import scala.collection.mutable
  3. object $11_MutableQueue {
  4. //可变队列的创建:mutable.Queue[元素类型](初始元素,....)
  5. def main(args: Array[String]): Unit = {
  6. val q1 = mutable.Queue[Int](10,3,2,7,9,4)
  7. //添加元素
  8. val q2 = q1.:+(30)
  9. println(q2)
  10. val q3 = q1.+:(40)
  11. println(q3)
  12. q1.+=(50)
  13. println(q1)
  14. q1.+=:(60)
  15. println(q1)
  16. val q4 = q1.++(List(100,300,200))
  17. println(q4)
  18. val q6 = q1.++:(List(400,500,600))
  19. println(q6)
  20. q1.++=(List(1000,40000))
  21. println(q1)
  22. q1.enqueue(300)
  23. println(q1)
  24. //删除元素
  25. q1.dequeue()
  26. println(q1)
  27. q1.dequeueAll(x=>x%2==0)
  28. println(q1)
  29. //获取元素
  30. println(q1(0))
  31. //修改元素
  32. q1(0)=300
  33. println(q1)
  34. }
  35. }