scala教程:不可变List

介绍

scala 中的 List 与 JAVA 不同,是一个集合,使用起来与java中的 ArrayList 类似

特点

不可变 List 可以 添加元素,只能在 头部插入、尾部追加,添加后,返回一个 新 List,新 List 有该新添加的元素,原 List 不会改变,类似 scala 的 不可变数组

注意:

  • 不能在中间位置插入元素
  • 也不能修改元素

应用场景

一般情况,应该用 List,少用 Array

定义语法

List 类是抽象类,不能创建对象,只能用 伴生对象 创建List

val list  = List(100,200,300)

或者

// 如果指定变量类型就必须指定泛型
val list2 : List[Int] = List(100,200,300)

或者

// 用 var 声明变量,较少使用
var list3 : List[Int] = List(100,200,300)

解释:

  • [Int]:相当于java中的泛型,可以存放的 Int类型,当前List中的初始值是0

含义: 创建一个 List,元素是:100、200、300

转成字符串 mkString()

使用 mkString() 方法,可以将 元素拼接成一个字符串,并可指定元素的 分隔符

val list : List[Int] = List(100,200,300)
println(list.mkString(","))

执行结果:

100,200,300

索引

相当于 编号 ,List中的每一个元素,都会有一个编号,从0开始

注意: 索引从0开始

访问元素

通过索引访问,索引从 0 开始,也就是说索引是0,表示List中的第1个元素

语法

变量名(索引)

注意: 与C、JAVA不同,scala用的是小括号 ()

例子

println(list(0))

数组越界

如果当前List只有5个元素,但访问第6个元素,就会报错,错误是 数组越界

即:访问不存在的元素,如下:

println(list(10))

就会报 数组越界,如下

java.lang.ArrayIndexOutOfBoundsException: 10

不能修改元素的值

list(1) = 30 // 编译器报错

长度属性

通过 .length、.size 方法获取长度(元素的个数),返回 Int类型

println("长度:"+list.size)
println("长度:"+list.length)

在尾部添加元素

语法一

:+ 表示在头部添加,: 在前,+ 在后

val 新list名 = list名.:+(元素)
例子
val list  = List(100,200,300)
//添加元素,返回一个list
val list_new1: List[Int] = list.:+(500)


println("list:"+list)// 原list没有变化
println("list_new1:"+list_new1) // 新list有新添加的元素

语法二

语法一的省略写法:

val 新list名 = 原list名 :+ 元素

解释:

第一步:因为 在scala中,调用对象的方法可以省略 .,如下:

val 新list名 = 原list名 :+(元素)

第二步:如果参数 只有一个,那么 () 也可以省略

例子
//添加元素,返回一个list
val list_new2: List[Int] = list_new1 :+ 600
println("list_new2:"+list_new2)

在头部插入元素

+: 表示在头部添加,+ 在前,: 在后

语法一

val 新list名 = list名.+:(元素)
例子
val list : List[Int] = List(100,200,300)

//添加元素,返回一个list
val list_new3: List[Int] = list.+:(2000)

println("list:"+list) // 原list没有变化
println("list_new3:"+list_new3) // 新list有新添加的元素

执行结果:

list:1,2,300
list_new3:404,1,2,300

语法二(特殊)

注意: 添加的元素 在前,list名 在后。顺序不能颠倒,否则报错

val 新list名 = 元素 +: 原list名

可以实现连加:

val 新list名 = 元素1 +: 元素2 +: list名
例子
val list : List[Int] = List(100,200,300)
val list_new4: List[Int] = 3000 +: list_new3

println("list:"+list) // 原list没有变化
println("list_new4:"+list_new4) // 新list有新添加的元素

原文出处:/show_1IX4PCnBJVpE.html