不可变列表
列表是scala中最重要的、也是最常用的数据结构
- 可以保存重复值
- 有先后顺序
在scala中,也有两种列表,一种是不可变列表、另一种是可变列表
定义
不可变列表就是列表的元素、长度都是可变的。
语法:
var/val 变量名=List(元素1,元素2,元素3...)
使用Nil创建一个不可的空列表
var/val 变量名=Nil
使用::方法创建一个不可变的列表
var/val 变量名=元素1:: 元素2::Nil
使用::拼接方式来创建列表,必须在最后添加一个Nil
示例一
创建一个不可变得列表,存放一下几个元素(1,2,3,4)
参考代码
scala> var a=List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
示例二
使用Nill创建一个不可变空列表
参考代码
scala> var b=Nil
b: scala.collection.immutable.Nil.type = List()
示例三
使用:: 方法创建列表,包含-2,-1两个元素
参考代码
scala> var c= -2:: -1 :: Nil
c: List[Int] = List(-2, -1)
可变列表
可变列表就是列表的元素,长度都是可变的(先导入 import scala.collection.mutable.ListBuffer)
- 可变集合都在mutable包中
- 不可变集合都在immutable包中(默认导入)
定义
使用ListBuffer[元素类型]()创建空的可变列表
var/val 变量名 = ListBuffer[Int]()
使用ListBuffer(元素1,元素2,元素3...)创建可变列表
var/val 变量名 = ListBuffer(元素1,元素2,元素3...)
示例一
创建空的整形可变列表
参考代码
var a=ListBuffer[Int]()
import scala.collection.mutable.ListBuffer
scala>
scala> a: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
示例二
创建一个可变列表,包含以下元素:1,2,3,4
参考代码
scala> var b=ListBuffer(1,2,3,4)
b: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
可变列表常用操作
- 获取元素(使用括号访问(索引值))
- 添加元素(+=)
- 追加一个列表(++=)
- 更改元素(使用括号获取元素,然后进行赋值)
- 删除元素(-=)
- 转换为list (toList)
- 转换为Array (toArray)
参考代码
创建可变列表
scala> var c=ListBuffer(1,2,3,4,5,6,7,8)
c: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8)
获取元素
scala> println(c(0))
1
添加元素
scala> c +=9
res12: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
添加列表
scala> c ++= List(11,12)
res14: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
删除元素
scala> c -= 1
res16: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
转换为List
scala> c.toList
res17: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
转换Array
scala> c.toArray
res18: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
列表常用操作
- 判断列表是否为空(isEmpty)
- 拼接两个列表(++)
- 获取列表的首个元素(head)和剩余部分(tail)
- 反转列表(reverse)
- 获取前缀(take)、获取后缀(drop)
- 扁平化(flaten)
- 拉链(zip)和拉开(unzip)
- 转换字符转(toString)
- 生成字符串(mkString)
- 并集(union)
- 交际(intersect)
- 差集(diff)
代码操作
创建2个列表
scala> var arr1=List(1,2,3,4,5)
arr1: List[Int] = List(1, 2, 3, 4, 5)
scala> var arr2=List(3,4,5,6,7,8)
arr2: List[Int] = List(3, 4, 5, 6, 7, 8)
判断列表是否为空
scala> println(arr1.isEmpty)
false
判断两个列表
scala> arr1++arr2
res1: List[Int] = List(1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 8)
获取首个元素
scala> println(arr1.head)
剩余部分
scala> println(arr1.tail)
List(2, 3, 4, 5)
反转列表
scala> arr1.reverse
res5: List[Int] = List(5, 4, 3, 2, 1)
获取前缀
scala> arr1.take(2)
res7: List[Int] = List(1, 2)
获取后缀
scala> arr1.drop(2)
res8: List[Int] = List(3, 4, 5)
扁平化
scala> var arr3=List(List(1,2),List(3),List(4,5))
arr3: List[List[Int]] = List(List(1, 2), List(3), List(4, 5))
scala> arr3.flatten
res9: List[Int] = List(1, 2, 3, 4, 5)
拉链
scala> var arr4=List("zhangsan","lisi","wuwang")
arr4: List[String] = List(zhangsan, lisi, wuwang)
scala> var arr5=List(20,18,19)
arr5: List[Int] = List(20, 18, 19)
scala> arr4.zip(arr5)
res10: List[(String, Int)] = List((zhangsan,20), (lisi,18), (wuwang,19))
拉开
scala> res10.unzip
res11: (List[String], List[Int]) = (List(zhangsan, lisi, wuwang),List(20, 18, 19))
转换字符串
scala> arr4.toString()
res12: String = List(zhangsan, lisi, wuwang)
生成字符串
scala> arr4.mkString
res13: String = zhangsanlisiwuwang
并集
scala> arr1.union(arr2)
res16: List[Int] = List(1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 8)
交际
scala> arr1.intersect(arr2)
res17: List[Int] = List(3, 4, 5)
差集
scala> arr1.diff(arr2)
res18: List[Int] = List(1, 2)
List 练习题
定义一个列表list1,内容为("a", "b" ,"c","d","e")
scala> var list1=List("a", "b" ,"c","d","e")
arr1: List[String] = List(a, b, c, d, e)
var list2=ListBuffer("a", "b" ,"c","d","e")
import scala.collection.mutable.ListBuffer
scala> arr2: scala.collection.mutable.ListBuffer[String] = ListBuffer(a, b, c, d, e)
在list1列表开头添加元素t
scala> list2.insert(0,"t")
"t" ++ list1
在列表开头添加指定列表List("m","n")的元素
List("m", "n") ++ list1
在列表list1后添加元素1
list1++ ("1")
list2.+=("2")
将列表的所有元素添加到 StringBuilder
var stringBuilder = new StringBuilder()
stringBuilder.append(list1)
将列表的所有元素添加到 StringBuilder并指定分隔符为","
list1.addString(stringBuilder,",")
获取列表索引为0的元素
println(list1(0))
检测列表中是否包含指定的元素a
println(list1.contains("a"))
向list1列表中追加数据"a"
list1 ++ ("a")
去除list1列表的重复元素,并返回新列表
val distinct = list1.distinct
list1丢弃前3个元素,并返回新列表
list1.drop(3)
list1丢弃最后2个元素,并返回新列表
list1.take(list1.length-2)
检测列表list1是否以指定a结尾
list1.endsWith(Seq("a"))
判断是否是以指定a开始的列表list1
list1.startsWith(Seq("a"))
获取list1列表的第一个元素
list1(0)
在list1中从指定位置 0 开始查找元素d第一次出现的位置
list1.indexOf("d",0)
list1返回所有元素,除了最后一个
list1.init
list1.take(list1.length-1)
检测列表list1是否为空
list1.isEmpty
返回list1列表最后一个元素
list1.drop(list1.length-1)
list1.last