Scala 的List

news/2024/11/16 18:01:46/

  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 += 5li1.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 foreachli1.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.ppmy.cn/news/1547506.html

相关文章

协方差矩阵及其计算方法

协方差矩阵&#xff08;Covariance Matrix&#xff09;是一个描述多维数据特征之间相互关系的矩阵&#xff0c;广泛应用于统计学和机器学习中。它用于表示各个特征之间的协方差&#xff0c;是分析多维数据分布和特征依赖性的重要工具。 什么是协方差矩阵&#xff1f; 协方差矩…

快速利用c语言实现线性表(lineList)

线性表是数据结构中最基本和简单的一个&#xff0c;它是n的相同类型数据的有序序列&#xff0c;我们也可以用c语言中的数组来理解线性表。 一、线性表声明 我们定义一个线性表的结构体&#xff0c;内部有三个元素&#xff1a;其中elem是一个指针&#xff0c;指向线性表的头&am…

力扣 LeetCode 1047. 删除字符串中的所有相邻重复项(Day5:栈与队列)

解题思路&#xff1a; 方法一&#xff1a;栈 class Solution {public String removeDuplicates(String s) {Deque<Character> stack new ArrayDeque<>();for (char c : s.toCharArray()) {if (stack.isEmpty() || stack.peek() ! c) stack.push(c);else stack.p…

ubuntu下openssl签名证书制作流程及验证demo

1.创建根CA证书 生成 rootCA.key 以及 rootCA.crt. 用你的域名或者ip地址替换demo.mlopshub.com&#xff0c;比如192.168.10.11 openssl req -x509 \-sha256 -days 356 \-nodes \-newkey rsa:2048 \-subj "/CNdemo.mlopshub.com/CCN/LBeijing" \-keyout rootCA.key …

fpga 同步fifo

FIFO 基础知识 FIFO&#xff08;First In First Out&#xff0c;即先入先出&#xff09;&#xff0c;是一种数据缓存器&#xff0c;用来实现数据先入先出 的读写方式。在 FPGA 或者 ASIC 中使用到的 FIFO 一般指的是对数据的存储具有先入先出 特性的缓存器&#xff0c;常被用于…

远程控制步骤

当远在千里之外的朋友想求助你帮他找到他电脑上的文件、或者是给他安装软件时。但是你给他说了他又找不到&#xff0c;那么这时你就可以通过控制对方的电脑去做一系列的操作。 如何远程控制对方的电脑非常关键。 方法一&#xff08;Windows自带远程桌面功能&#xff09;&#…

利用正则表达式批量修改文件名

首先&#xff0c; 我们需要稍微学习一下正则表达式的使用方式&#xff0c;可以看这里&#xff1a;Notepad正则表达式使用方法_notepad正则匹配-CSDN博客 经过初步学习之后&#xff0c;比较重要的内容我做如下转载&#xff1a; 元字符是正则表达式的基本构成单位&#xff0c;它们…

离线语音识别自定义功能怎么用?

一、离线语音识别 随着人工智能的飞速发展&#xff0c;离线语音识别技术成为了一项备受瞩目的创新。离线语音识别技术能够将人的语音转化为可理解的文本&#xff0c;无需依赖网络连接&#xff0c;极大地提升了语音识别的便捷性和实用性。 与传统的云端语音识别相比&#xff0c;…