Scala:Scala的List

Scala的List概述

 

Scala中的List与Java中的完全不同它是基于链表实现的并且是一个不可变的集合,无论大小还是元素,都是不可变的。由于List的这种特性,它在Scala中的大部分操作是基于递归进行的。List与栈类似,也是后进先出的数据结构。

 

————Scala的List的构建————

 

在 Scala中可以通过Nil和:: 方式构建List。Nil表示空,相当于List(),即List集合中没有任何元素。::表示添加的意思,与堆栈的push有些类似。定义List(1,2,3,4)的方式相当于1::2::3::Nil。在集合中添加多个集合元素使用:::方式。

 

例如 List(1,2)=11,List(3,4)=12,结合这两个集合可以使用11:::12=(1,2,3,4)。

 

————Scala 的 List 的类型————

 

定义 List 的类型方式为List[T],T表示数据类型,指定List集合中只能存放T类型的元素。

 

例如 List[String]表示List集合中只可以存放String类型的元素。

 

————Scala 的 List 对应的懒加载集合————

 

Stream 类似于之前介绍的view,只是view适用于所有集合,而Stream相当于List集合的懒加载形式。

 

例如,定义一个Stream,Stream(1,2,3)等价于1#::2#::3::Stream.empty。当对 Stream 进行转换操作时,不会立即求值。当强制操作时才会触发求值操作。

 

————Scala 的 List 的可变————

 

List是一个不可变的集合,想要获取可变的序列就需要Listbuffer,List与Listbuffer之间相互对应。通过-=或+=方式删除或添加元素,还可以调用remove 方法移除元素。Listbuffer可以通过索引方式 赋值,而List不可以。

 

Scala的List的基本操作

 

List的基本操作中/:或:\的形式称为折叠方法,也是大部分集合都有的一种方法。

 

/:称为左行代折叠

 

:\称为右折叠

 

左折叠运算由初始值、操作符、List 和操作组成,即(z/:List)(op)等价于op(op(op(z,a),b),c)。

 

右折叠是 List 在前,即(List(a,b,e):lz)(op)等价于op(a,p(b,op(c,z)))。

 

//List:列表

//分类:可变 与 不可变(默认的)

 

import scala.collection.mutable.ListBuffer

object Test26 {

//def main(args: Array[String]): Unit = {

  //1.建立一个不可变的列表

  val l1=List(1,2,3)

  //2.输出 第1个。 下标从0开始

  println(l1(0))

  //3.不可变 l1(0)=100写法是错误的!!!

// l1(0)=100

 

    //4.添加

  val l2=l1.prepended(0) //头部添加

  val l3=l1.appended(100) //尾部添加

 

    //5.删除 -- 不行!

// val l4=l1.re

// println(l1)

//}

  def main(args: Array[String]): Unit = {

   //1.建立一个可变的列表 ListBuffer

  val l1=ListBuffer(1,2,3)

  //2.输出 第1个元素

  println(l1(0))

  //3.直接修改

  l1(0)=100

  //4.添加 +=

  l1+=4 //在尾部添加

  l1.prepend(-1) //在头部添加

  l1.insert(2,150) //在指定位置添加。把2这个位置上的元素改成150,其他向后边移动

  //5.删除 -=

  l1-=150 //删除指定元素

  l1.remove(0) //删除指定位置上的元素

  //6.判断元素是否存在

  val rs=l1.contains(21) //判断元素2是否在list中

  println(s"元素2是否在List中存在?:$rs")

  //7.合并List,把多个列表元素合并到一个列表

  val l2=ListBuffer(10,20)

  val l3=l1++l2 //把 l1 和 l2 中的内容合并到l3中

 

  println(l3)

 

  //8.遍历输出

  for (i<-l3){

    println(i)

  }

  println("-"*20)

  l3.foreach(println)

  }

}

 

java.lang.ArrayIndexOutOfBoundsException: 1 (JTeachers.java:24) (JavaRDDLike.scala:143) (JavaRDDLike.scala:143) (Iterator.scala:434) (Iterator.scala:440) (ExternalSorter.scala:191) (SortShuffleWriter.scala:63) (ShuffleMapTask.scala:96) (ShuffleMapTask.scala:53) (Task.scala:108) (Executor.scala:335) (ThreadPoolExecutor.java:1142) (ThreadPoolExecutor.java:617) (Thread.java:745) (TID 0, localhost, executor driver): java.lang.ArrayIndexOutOfBoundsException: 1 (JTeachers.java:24) (JavaRDDLike.scala:143) (JavaRDDLike.scala:143) (Iterator.scala:434) (Iterator.scala:440) (ExternalSorter.scala:191) (SortShuffleWriter.scala:63) (ShuffleMapTask.scala:96) (ShuffleMapTask.scala:53) (Task.scala:108) (Executor.scala:335) (ThreadPoolExecutor.java:1142) (ThreadPoolExecutor.java:617) (Thread.java:745) Driver stacktrace: (DAGScheduler.scala:1499) (DAGScheduler.scala:1487) (DAGScheduler.scala:1486) (ResizableArray.scala:59) (ArrayBuffer.scala:48) (DAGScheduler.scala:1486) (DAGScheduler.scala:814) (DAGScheduler.scala:814) (Option.scala:257) (DAGScheduler.scala:814) (DAGScheduler.scala:1714) (DAGScheduler.scala:1669) (DAGScheduler.scala:1658) (EventLoop.scala:48) (DAGScheduler.scala:630) (SparkContext.scala:2022) (SparkContext.scala:2043) (SparkContext.scala:2062) (SparkContext.scala:2087) (RDD.scala:936) (RDDOperationScope.scala:151) (RDDOperationScope.scala:112) (RDD.scala:362) (RDD.scala:935) (JavaRDDLike.scala:361) (JavaRDDLike.scala:45) (JTeachers.java:31) (Native Method) (NativeMethodAccessorImpl.java:62) (DelegatingMethodAccessorImpl.java:43) (Method.java:498) (SparkSubmit.scala:784) (SparkSubmit.scala:188) (SparkSubmit.scala:213) (SparkSubmit.scala:127) (SparkSubmit.scala) Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 (JTeachers.java:24) (JavaRDDLike.scala:143) (JavaRDDLike.scala:143) (Iterator.scala:434) (Iterator.scala:440) (ExternalSorter.scala:191) (SortShuffleWriter.scala:63) (ShuffleMapTask.scala:96) (ShuffleMapTask.scala:53) (Task.scala:108) (Executor.scala:335) (ThreadPoolExecutor.java:1142) (ThreadPoolExecutor.java:617) (Thread.java:745)
最新发布
11-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值