介绍
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有新添加的元素