Scala的List
Scala 中的 List 和 Java List 不一样,在 Java 中 List 是一个接口,真正存放数据是 ArrayList,而 Scala 的 List 可以直接存放数据,就是一个object,默认情况下 Scala 的 List 是不可变的
,List 属于序列 Seq.
val List = scala.collection.immutable.List
object List extends SeqFactory[List]
创建 List
object ListDemo01 {
def main(args: Array[String]): Unit = {
val list01 = List(1, 2, 3) //创建时,直接分配元素 println(list01)
val list02 = Nil //空集合 List()
println(list02)
}
}
说明
- List默认为不可变的集合
- List 在 scala 包对象声明的,因此不需要引入其它包也可以使用
val List = scala.collection.immutable.List - List 中可以放任何数据类型,比如 arr1 的类型为 List[Any]
- 如果希望得到一个空列表,可以使用 Nil 对象, 在 scala 包对象声明的,因此不需要引入其它包也可以使用
val Nil = scala.collection.immutable.Nil
访问 List
//访问 List 的元素
val value1 = list01(1) // 1 是索引,表示取出第 2 个元素
List 元素的追加(注意: 所有的追加都是返回新的List, 因为List 是 immutable
):
- 在List最后追加数据:
println("-------------list 追加元素后的效果-----------------")
//通过 :+ 和 +: 给 list 追加元素(本身的集合并没有变化)
var list1 = List(1, 2, 3, "abc")
// :+运算符表示在列表的最后增加数据
val list2 = list1 :+ 4 // (1,2,3,"abc", 4)
println(list1) //list1 没有变化 (1, 2, 3, "abc"),说明 list1 还是不可变
println(list2) //新的列表结果是 [1, 2, 3, "abc", 4]
val list3 = 10 +: list1 // (10,1, 2, 3, "abc")
println("list3=" + list3)
- 在List前面追加数据:
运算规则:从右到左
::
演示(List作为整体追加):
val list4 = List(1, 2, 3, "abc")
//说明 val list5=4::5::6::list4::Nil 步骤
//1. List()
//2. List(List(1, 2, 3, "abc"))
//3. List(6,List(1, 2, 3, "abc"))
//4. List(5,6,List(1, 2, 3, "abc"))
//5. List(4,5,6,List(1, 2, 3, "abc"))
val list5 = 4 :: 5 :: 6 :: list4 :: Nil
println("list5=" + list5)
:::
演示(List拆开追加):
//说明 val list6=4::5::6::list4:::Nil 步骤
//1. List()
//2. List(1, 2, 3, "abc")
//3. List(6,1, 2, 3, "abc")
//4. List(5,6,1, 2, 3, "abc")
//5. List(4,5,6,1, 2, 3, "abc")
val list6 = 4 :: 5 :: 6 :: list4 ::: Nil
println("list6=" + list6)
Scala 的 ListBuffer:
ListBuffer 是可变的 list 集合,可以添加,删除元素,ListBuffer 属于序列, 追一下继承关系即可
Seq var listBuffer = ListBuffer(1,2)
ListBuffer操作相对简单:
import scala.collection.mutable.ListBuffer
object ListBufferDemo01 {
def main(args: Array[String]): Unit = {
//创建 ListBuffer
val lst0 = ListBuffer[Int](1, 2, 3)
//如何访问
println("lst0(2)=" + lst0(2)) // 输出 lst0(2)= 3
for (item <- lst0) { // 遍历,是有序
println("item=" + item)
}
//动态的增加元素,lst1 就会变化, 增加一个一个的元素
val lst1 = new ListBuffer[Int] //空的 ListBuffer
lst1 += 4 // lst1 (4)
lst1.append(5) // list1(4,5)
//
lst0 ++= lst1 // lst0 (1, 2, 3,4,5)
println("lst0=" + lst0)
val lst2 = lst0 ++ lst1 // lst2(1, 2, 3,4,5,4,5)
println("lst2=" + lst2)
val lst3 = lst0 :+ 5 // lst0 不变 lst3(1, 2, 3,4,5,5)
println("lst3=" + lst3)
println("=====删除=======")
println("lst1=" + lst1)
lst1.remove(1) // 表示将下标为 1 的元素删除
for (item <- lst1) {
println("item=" + item) //4
}
}
}