当前位置: 首页 > article >正文

Scala 的List

  Scala列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同。首先,列表是不可变的,值一旦被定义了就不能改变,其次,列表具有递归的结构(也就是链表结构), 而数组不是。列表的元素类型T可以写成List[T]。

1.1 Scala的List概述

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

1.Scala的List的构建

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

2.Scala的List的类型

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

3.Scala的List对应的懒加载集合

  Stream类似于之前介绍的view,只是view适用于所有集合,而Stream相当于List集合的懒加载形式。例如,定义一个Stream,Stream(1,2,3)等价于1#::2#::3::Stream.empty。当对Stream进行转换操作时,不会立即求值。当强制操作时才会触发求值操作。

4.Scala的List的可变

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

1.2 Scala的List的基本操作

1.可变List

相关代码如下:

import scala.collection.mutable.ListBuffer

// List:
// 有序:下标从0开始,可以依次访问
// 链表结构:有头有尾

// 分类:可变,不可变(默认不可变)
// 操作:添加,删除,修改,查询,遍历

object list_1 {
  //可变
  def main(args: Array[String]): Unit = {
    val li1 = ListBuffer(2, 3, 4)
    //头
    //    val firstOne = li1.head
    //尾
    //    val lastOne = li1.last
    //1.添加
    // 在头部添加
    li1.prepend(1)
    // 在尾部添加
    li1 += 5
    li1.prepend(6)

    //2.删除
    //2.1删除某个元素
    //    li1 -= 5
    //2.2删除某个位置的元素,例如,删除第三个
    li1.remove(2)

    //3.修改
    //    下标来修改
    li1(0) = 100

    //4.查询
    println(s"200在不在list中 ${li1.contains(200)}")

    //5.合并 ++。 简单的合并,没有去重。
    val li3 = ListBuffer(1, 2, 3) ++ ListBuffer(2, 3, 4)

    println(li3)

    //6.遍历
    //6.1 for
    // for(i <- li1){println(i)}
    //6.2 foreach
    li1.foreach(println)
    //    println(li1)
  }
}

2.不可变List

相关代码如下:

object list_2 {
    //不可变
    def main(args: Array[String]): Unit = {
      val li1 = ListBuffer(2, 3, 4)
      //头
      val firstOne = li1.head
      //尾
      val lastOne = li1.last

      //通过下标来访问元素
      println(li1(1)) // 1 就是第二个元素

      //li1(1)=200
      //      println(firstOne,lastOne)

      //合并
      //(1) :::
      //(2) ++
      val li3 = li1 ++ List(5, 6, 7)
      println(li3)
  }
}

http://www.kler.cn/a/392747.html

相关文章:

  • 山泽光纤HDMI线:铜线的隐藏力量
  • 数据集标注txt文件读取小工具
  • Android Studio 将项目打包成apk文件
  • MySQL系列之如何在Linux只安装客户端
  • 若依笔记(八):芋道的Docker容器化部署
  • 【go从零单排】Timer、Epoch 时间函数
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-成绩排序ABCDE
  • 3DTiles之使用customShader调整风格
  • 图像处理实验一(Matlab Exercises and Image Fundamentals)
  • Unity使用PS合并贴图
  • 「IDE」PyCharm 之 安装与卸载
  • Python 数据库操作教程
  • python购物计算 2024年6月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析
  • 51c自动驾驶~合集21
  • python,dataclasses模块介绍及示例
  • 基于MATLAB的图像处理字母识别
  • MySQL初学之旅(2)增删改查—上
  • java 读取log日志文件关键信息
  • BeanUtils.copyProperties,拷贝后,修改target对象的字段,如果保证source对象字段不会变化
  • 2024年9月 GESP CCF C++六级编程能力等级考试认证真题
  • Jailbreaking ChatGPT via Prompt Engineering: An Empirical Study
  • 手术机器人:精准医疗的新选择
  • blind-watermark - 水印绑定
  • 大数据新视界 -- 大数据大厂之 Impala 在大数据架构中的性能优化全景洞察(上)(13/30)
  • CSS Modules中的 :global
  • 矩阵的各种计算:乘法、逆矩阵、转置、行列式等——基于Excel实现