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)
  }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值