zoukankan      html  css  js  c++  java
  • 集合

    集合

    注意:

    1. 这里说的集合是包括集合和数组(Array,List,Map,Set)
    2. 所有的集合类都继承与Iteratble[T]
    3. 可变的集合和对应的类库:scala.collection.mutable.Set/Map/ArrayBuffer/ListBuffer
    4. 可变的集合和对应的类库:scala.collection.immutable./Set/Map/List (scala.Array)
    5. 对于Set和Map集合,因为可变的和不可变的名称都是相同的,而scala中默认是表示不可变的,所以要表示可变的时候加上包名mutable:mutable.Set[Int]()

    Array和ArrayBuffer

    Array

    1. array创建方式一:通过new的方式创建,指定数组的数据类型和长度(如果数据类型不是固定的用Any)
        val arr2 = new Array[Int](5)
     // arr2: Array[Int] = Array(0, 0, 0, 0, 0)   默认值为0
        // 依据下标索引进行赋值
        arr2(1) = 100
        arr2(3) = 50

        2.array创建的方式二:通过指定值的方式创建 ,创建方式在Scala语言中很常见,底层是通过new创建类的实例对象

        val arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)
        // 获取数组中元素,使用下标的方式获取,从0开始
        println(s"First Element = ${arr(0)}")
        println(s"Length = ${arr.length}, Size = ${arr.size}")
        // 修改数组中某个下标元素的值
        arr(4) = 100
        // 循环遍历数组中元素
        for(item <- arr) println(item)
        arr.foreach(item => println(item))

     ArrayBuffer 

    1. ArrayBuffer的创建:是通过new的方式创建
       1  val buffer = new ArrayBuffer[Int]()
       2     // 向可变的数组中加入元素
       3     buffer += 2
       4     buffer += 120
       5     // 可以向可变数组中加入多个元素,比如list或不可变数组
       6     buffer ++= Array(44, 55, 66)
       7     /**
       8       * 在实际的开发中,如果对可变数组中的数据进行操作,建议将可变数组转化为不可变数组
       9       */
      10     val array = buffer.toArray
      11     // 将数组中元素合为一个字符串,指定各个元素之间的分隔符
      12     array.mkString(",")
      13     array.mkString("< ", ", ", " >")

       List和ListBuffer

    List

    1. List集合的创建方式一:通过指定值的方式创建
      // 创建不可变的列表List
          val list = List(1, 2, 3, 4, 5, 6, 7, 8)
               // List 的组成:head(list的第一个元素)+tail(是一个List,除了头部元素以外的其他元素组成的List集合)   
          println(s"head: ${list.head}")
          println(s"tail: ${list.tail}")
          // TODO: 如果List只有一个元素,head为元素 tail为空集合List()/Nil(空的List集合,可使用 Nil 表示)
          val list2 = List(1000)
          println(s"head: ${list2.head}")
          println(s"tail: ${list2.tail}") 
    2. List集合的创建方式二:使用尾部添加头部的方式创建,使用方法.::()或者简写成::
        // TODO ->    1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3)
        //注意:.::和::都是 list集合的方法,不过::运算符从右往左运算,.::运算符从左往右运算
          val list3: List[Int] = 2 :: 1 :: Nil  // 此运算从右向左
          // 将list中元素转化为字符串
          println(list3.mkString(", "))

    ListBuffer

    1.  ListBuffer的创建方式:底层还是通过new的方式创建的
       // 创建ListBuffer实例对象
          val listBuffer = ListBuffer[Int]()
          // 向可变的ListBuffer中添加元素
          listBuffer += 1
          listBuffer += 2
          listBuffer ++= List(3, 4, 5)
          listBuffer += (6, 7, 8)
          // 同样,如果对可变的list集合进行操作,建议将其转换为不可变的list列表
          val list5 = listBuffer.toList
          println(list5.mkString("<", ", ", ">"))
          // 判断列表是否为空
          println(list5.isEmpty)
          // 判断某个元素是否在列表中
          println(list5.contains(9))

    Set和mutable.Set

    1. 存放的数据:唯一无序,可以用来去重
    2. set的可变与不可以变的名称相同,默认的不可变的集合,要用可变的集合需要在前面加上包名mutable

    Set

    1. Set集合的创建方式:
       // 创建不可变的Set集合
          val set: Set[Int] = Set(1, 1, 1, 1, 4, 3, -4, -10, 8, 2, 2) // 会进行去重得到set: Set[Int] = Set(1, -4, 2, -10, 3, 8, 4)
          println(set.mkString("|"))
          println(s"max = ${set.max}")
          println(s"min = ${set.min}")

    mutable.Set

    1. mutable.Set集合的创建方式:
          val set2 = mutable.Set[Int]()
          // 添加元素
          set2 += 1
          set2 ++= Set(2, 3, 4) // 不可变的Set
          set2 ++= List(5, 6, 7)
          //将可变的Set集合转换为不可变的Set集合
          set2.toSet.foreach(println(_))
          // 将Set转换为List
          set2.toList.foreach(println)

     Map和mutable.Map

    集合中的元素就是一个Key-value对也就是一个二元组

    Map

    1. Map集合的创建方式:通过指点值的方式创建
          //TODO 1.Create immutable map
          // 指点元素为key-value对
          val map1 = Map("key" -> "value","name"->123)
          // 指点元素为二元组
          val map2 = Map(("key","value"),("age",12),("",3))
          
          //TODO 2. 获取集合中的元素
      //    map(key) : 不推荐使用,当且仅当key存在,不存在就会报错
      //    map.get(key): 返回值两种类型:如果key存在就返回Some(value); 如果key不存在就返None,不会报错
      //    map.getOrElse(key, dafualeValue): 建议使用此种方式
      
          println(map1.get("weigh"))
          println(map1.getOrElse("weigh","不存在该key"))
          println(map1("weigh"))

    mutable.Map

    1. mutable.Map的创建方式:
         //创建可变的集合:
          val map3 = mutable.Map[String, Int] ()
          val mapbuffer = mutable.Map[Any,Any]()
          // 添加一个元素
          mapbuffer += 1->2
          val touple= (2,3)
          mapbuffer += touple
          // 添加多个元素
          mapbuffer ++= Map((3,4),(5,6))
          //将可变的Map转换为不可变的Map
           val map4 = map3.toMap

    元祖

    1. 元组的定义:用()将数据括起来就是元祖,和Python中的元祖类似      val tuple= (1001, 45.34, "Spark")
    2. 元组中元素的获取:第N个元素:tuple._N(第一个元素的下标是1)            val first = tuple._1
    3. 元组的数据类型可以是任意的,当然可以是元组,此时元组的嵌套
    4. 元组个数:元组中最多有22个元素
    5. 每个元组对应于一个类:一元组 -> Tuple1, 二元组 -> Tuple2,三元组 -> Tuple3,......二十二元组 -> Tupl22

    二元组

    1. 定义:元组中的元素个数为2(key——value对就是二元组)
    2. 二元组特有的创建方法:val tup = "hadoop"->88
    3. 二元组就是Key/Value对,所以Map集合中元素的数据类型就是二元组
      //    swap: 针对二元组仅有的方法,将key和value进行互换
          val tu1 = ("name","king")
          println(tu1.swap) 
      //    2. 二元组特有的创建方法:
          val tup = "hadoop"->88

      集合的合并和拉链操作

    集合的合并

    1. 集合的合并:将两个集合进行合成元素为二元组的新集合,可以实现list和Map之间的转换
    2. zip :可以将两个集合中下标对应的元素组成一个元组,然后组成一个新的集合
    3. unzip: 将元素为二元组的集合分解成为两个集合,其中一个集合的值为key,另一个集合的值为value
        val list1 = List(1, 2, 3, 4, 5)
          val list2 = List("A", "B", "C", "D", "E")
          val zipList: List[(Int, String)] = list1.zip(list2)
          // 可以将一个List[(Key, Value)]拆分为两个List
          val (keys, values) = zipList.unzip
          val map = Map(11 -> "A", 22 -> "BB", 33 -> "CC")
          val map1 = map.unzip

    集合的拉链

    1. 集合的拉链操作:将单个的集合转变成元素为二元组的集合,key为原先集合的值,value为原先集合的下标
       val lt = List("AA", "BB", "CC", "DD", "EE")
        val zipIndexList: List[(String, Int)] = lt.zipWithIndex
       // List((AA,0), (BB,1), (CC,2), (DD,3), (EE,4))
        println(zipIndexList)  

       Java对象和Scala对象的相互转换

    1. scala中可以直接调用java中的类,得到java对象,使用可以使用对应的方法(语法为scala的语法)
    2. 作用:相互转换之后,不同的实例可以调用不同的方法。scala对象转换为java对象可以使用java方法
        //  导入对应的包:import java.unit
          import java.util
          //  创建对应的实例对象:
          val hashMap = new util.HashMap[String, Int]()
          //   调用对应的方法:
          hashMap.put("spark", 1244)
          // TODO:将Java中HashMap集合转换为Scala中Map集合实例对象
          //  导入对应的包:import scala.collection.JavaConverters._
          import scala.collection.JavaConverters._
          import scala.collection._
          //  将Java中HashMap集合转换为Scala中Map集合实例对象:调用asScala方法
          val map1:mutable.Map[String, Int] = hashMap.asScala
          map1.foreach(println(_))
          // TODO: 将Scala中列表转换为Java中列表
          val list: List[String] = List("aa", "bb", "cc", "dd")
          // 用于需要导入
          // import scala.collection.JavaConverters._
          // 将Scala中Map集合转换为Java中HashMap集合实例对象:asJava
          val lst: util.List[String] = list.asJava
          println(lst)
  • 相关阅读:
    python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
    Postman + newman + jenkins 的API自动化测试应用
    Selenium + WebDriver 各浏览器驱动下载地址
    pythonon ddt数据驱动二(json, yaml 驱动)
    python ddt 实现数据驱动一
    Python + logging 输出到屏幕,将log日志写入文件
    python 多线程小练习
    pycharm + git 的集成使用
    Map的遍历方式
    69道Spring面试题和答案
  • 原文地址:https://www.cnblogs.com/WeiKing/p/11419701.html
Copyright © 2011-2022 走看看