|NO.Z.00063|——————————|BigDataEnd|——|Hadoop&Scala.V02|——|Scala.v02|集合|Seq|

一、Seq
### --- seq

~~~     Seq代表按照一定顺序排列的元素序列;
~~~     该序列是一种特别的可迭代集合,包含可重复的元素;
~~~     元素的顺序是确定的,每个元素对应一个索引值;
### --- Seq提供了两个重要的子特质:

~~~     IndexedSeq:提供了快速随机访问元素的功能,它通过索引来查找和定位的
~~~     LinearSeq:提供了访问headtail的功能,它是线型的,有头部和尾部的概念,通过遍历来查找。
二、List
### --- List

~~~     List代表元素顺序固定的不可变的链表,它是Seq的子类,在Scala编程中经常使用。
~~~     List是函数式编程语言中典型的数据结构,与数组类似,可索引、存放类型相同的元素。
~~~     List一旦被定义,其值就不能改变。
### --- List列表有头部和尾部的概念,可以分别使用head和tail方法来获取:

~~~     head返回的是列表第一个元素的值
~~~     tail返回的是除第一个元素外的其它元素构成的新列表
~~~     这体现出列表具有递归的链表结构。
~~~     Scala定义了一个空列表对象Nil,定义为List[Nothing]
~~~     借助 Nil 可将多个元素用操作符 :: 添加到列表头部,常用来初始化列表;
~~~     操作符 ::: 用于拼接两个列表;
### --- 编程示例

// 构建List
val lst1 = 1 :: 2:: 3:: 4 :: Nil
// :: 是右结合的
val lst2 = 1 :: (2:: (3:: (4 :: Nil)))
// 使用 ::: 拼接List
val lst3 = lst1 ::: lst2
// 使用 head、tail获取头尾
lst3.head //返回第一个元素
lst3.tail //返回除第一个元素外的其它元素构成的新列表
lst3.init //返回除最后一个元素外的其它元素构成的新列表
lst3.last //返回最后一个元素
### --- 列表递归的结构,便于编写递归的算法:

package cn.yanqi.edu.scala.section3
import scala.util.Random
object test1 {
    def main(args: Array[String]): Unit = {
        val random = new Random(100)
        val lst = List.fill(100)(random.nextInt(200))
    println(lst)
    println(s"sum(lst) = ${sum(lst)}; sum(lst) = ${lst.sum}")
    println(quickSort(lst))
}
// 快排
def quickSort(lst: List[Int]): List[Int] = {
    lst match {
    case Nil => Nil
    case head :: tail =>
    val (less, greater) = tail.partition(_ < head)
quickSort(less) ::: head :: quickSort(greater)
}
}
}
二、编程实现
### --- 编程代码

package yanqi.cn.part09

object ListDemo {
  def main(args: Array[String]): Unit = {
    //Nil表示一个空的列表
    //::操作符表示向集合中添加元素,它是从右往左进行运算的,所以集合对象一定要放在最右边
    val list1 = 1 :: 2 :: 3 :: 4 :: Nil
    val list2 = 5 :: 6 :: 7 :: 8 :: Nil

    //使用:::操作符进行了拼接,不要使用::进行列表的拼接,因为这样拼接的结果不是我们想要的
    val list3=list1:::list2

    println(list3.head) //返回第一个元素
    println(list3.tail) //返回除第一个元系之外的其他元素构成的新列表
    println(list3.init) //返回除最后一个元素之外的其他元素构成的新列表
    println(list3.last) //返回最后一个元素

    val list4=List(4,2,6,1,7,9)
    println(quickSort(list4))
  }
  def quickSort(list:List[Int]):List[Int]={
    list match {
      case Nil=>Nil
      case head::tail=>
        //通过partition将tail分为两部分
        //小于head的元素放入less列表中,大于head的元素放入greater列表中
        val (less,greater) =tail.partition(_<head)
        quickSort(less):::head::quickSort(greater)
    }
  }
}
### --- 编译打印

D:\JAVA\jdk1.8.0_231\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=60094:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\JAVA\jdk1.8.0_231\jre\lib\charsets.jar;D:\JAVA\jdk1.8.0_231\jre\lib\deploy.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\dnsns.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jaccess.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\localedata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\nashorn.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunec.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\zipfs.jar;D:\JAVA\jdk1.8.0_231\jre\lib\javaws.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jce.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfr.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfxswt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jsse.jar;D:\JAVA\jdk1.8.0_231\jre\lib\management-agent.jar;D:\JAVA\jdk1.8.0_231\jre\lib\plugin.jar;D:\JAVA\jdk1.8.0_231\jre\lib\resources.jar;D:\JAVA\jdk1.8.0_231\jre\lib\rt.jar;E:\NO.Z.10000——javaproject\NO.Z.00002.Hadoop\ScalaPro\out\production\ScalaPro;D:\JAVA\scala-2.12.2\lib\scala-library.jar;D:\JAVA\scala-2.12.2\lib\scala-reflect.jar yanqi.cn.part09.ListDemo
1
List(2, 3, 4, 5, 6, 7, 8)
List(1, 2, 3, 4, 5, 6, 7)
8
List(1, 2, 4, 6, 7, 9)

Process finished with exit code 0
三、Queue
### --- Queue

~~~     队列Queue是一个先进先出的结构。
~~~     队列是一个有序列表,在底层可以用数组或链表来实现。
~~~     先进先出的原则,就是先存入的数据,要先取出,后存入的数据后取出。
~~~     在Scala中,有scala.collection.mutable.Queue和scala.collection.immutable.Queue,
~~~     一般来说,我们使用的是scala.collection.mutable.Queue
### --- 编程示例

//创建可变的队列
val queue1 = new collection.mutable.Queue[Int]()
println(queue1)
//队列当中添加元素
queue1 += 1
//队列当中添加List
queue1 ++= List(2,3,4)
println(queue1)
// 按照进入队列顺序,删除队列当中的元素(弹出队列)
// 返回队列中的第一个元素,并从队列中删除该元素。
val dequeue = queue1.dequeue()
println(dequeue)
println(queue1)
// 向队列当中加入元素(入队列操作)
// 元素入队列
queue1.enqueue(5,6,7)
println(queue1)
//获取第一个、最后一个元素
println(queue1.head)
println(queue1.last)
四、编程实现
### --- 编程代码

package yanqi.cn.part09

import scala.collection.mutable

object QueueDemo {
  def main(args: Array[String]): Unit = {
    //创建一个可变的队列
    val queue1=new mutable.Queue[Int]()
    println(queue1)

    //队列当中添加元素
    queue1 +=1
    //队列当中添加List列表
    queue1 ++=List(2,3,4)
    println(queue1)

    //按照进入队列的顺序,删除队列当中的元素
    //返回队列中的第一个元素,并从队列中删除这个元素
    val dequeue=queue1.dequeue()
    println(dequeue)
    println(queue1)

    //再向队列中添加元素
    queue1.enqueue(5,6,7)
    println(queue1)

    //获取第一个、最后一个元素
    println(queue1.head)
    println(queue1.last)
  }
}
### --- 编译打印

D:\JAVA\jdk1.8.0_231\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=60123:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\JAVA\jdk1.8.0_231\jre\lib\charsets.jar;D:\JAVA\jdk1.8.0_231\jre\lib\deploy.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\dnsns.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jaccess.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\localedata.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\nashorn.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunec.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;D:\JAVA\jdk1.8.0_231\jre\lib\ext\zipfs.jar;D:\JAVA\jdk1.8.0_231\jre\lib\javaws.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jce.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfr.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jfxswt.jar;D:\JAVA\jdk1.8.0_231\jre\lib\jsse.jar;D:\JAVA\jdk1.8.0_231\jre\lib\management-agent.jar;D:\JAVA\jdk1.8.0_231\jre\lib\plugin.jar;D:\JAVA\jdk1.8.0_231\jre\lib\resources.jar;D:\JAVA\jdk1.8.0_231\jre\lib\rt.jar;E:\NO.Z.10000——javaproject\NO.Z.00002.Hadoop\ScalaPro\out\production\ScalaPro;D:\JAVA\scala-2.12.2\lib\scala-library.jar;D:\JAVA\scala-2.12.2\lib\scala-reflect.jar yanqi.cn.part09.QueueDemo
Queue()
Queue(1, 2, 3, 4)
1
Queue(2, 3, 4)
Queue(2, 3, 4, 5, 6, 7)
2
7

Process finished with exit code 0

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示