Scala中的集合

来源:互联网 发布:推荐个苹果下载软件 编辑:程序博客网 时间:2024/05/17 22:14

        Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,Scala中集合有可变(mutable)和不可变(immutable)两种类型,immutable类型的集合初始化后就不能改变了(注意与val修饰的变量进行区别)

1. 序列

不可变的序列import scala.collection.immutable._

Scala中列表要么为空(Nil表示空列表)要么是一个head元素加上一个tail列表。

9 :: List(5, 2)  :: 操作符是将给定的头和尾创建一个新的列表

注意::: 操作符是右结合的,如9 :: 5 :: 2 :: Nil相当于9 :: (5 :: (2 :: Nil))

object ImmutListTest {  def main(args: Array[String]) {    //创建一个不可变的集合    val lst1 = List(1,2,3)    //将0插入到lst1的前面生成一个新的List    val lst2 = 0 :: lst1    val lst3 = lst1.::(0)    val lst4 = 0 +: lst1    val lst5 = lst1.+:(0)    //将一个元素添加到lst1的后面产生一个新的集合    val lst6 = lst1 :+ 3    val lst0 = List(4,5,6)    //将2个list合并成一个新的List    val lst7 = lst1 ++ lst0    //将lst0插入到lst1前面生成一个新的集合    val lst8 = lst1 ++: lst0    //将lst0插入到lst1前面生成一个新的集合    val lst9 = lst1.:::(lst0)    println(lst9)  }}

可变的序列 import scala.collection.mutable._

import scala.collection.mutable.ListBufferobject MutListTest extends App{  //构建一个可变列表,初始有3个元素1,2,3  val lst0 = ListBuffer[Int](1,2,3)  //创建一个空的可变列表  val lst1 = new ListBuffer[Int]  //向lst1中追加元素,注意:没有生成新的集合  lst1 += 4  lst1.append(5)  //将lst1中的元素最近到lst0中, 注意:没有生成新的集合  lst0 ++= lst1  //将lst0和lst1合并成一个新的ListBuffer 注意:生成了一个集合  val lst2= lst0 ++ lst1  //将元素追加到lst0的后面生成一个新的集合  val lst3 = lst0 :+ 5}

2. Set

不可变的Set

import scala.collection.immutable.HashSetobject ImmutSetTest extends App{  val set1 = new HashSet[Int]()  //将元素和set1合并生成一个新的set,原有set不变  val set2 = set1 + 4  //set中元素不能重复  val set3 = set1 ++ Set(5, 6, 7)  val set0 = Set(1,3,4) ++ set1  println(set0.getClass)}

可变的Set

import scala.collection.mutableobject MutSetTest extends App{  //创建一个可变的HashSet  val set1 = new mutable.HashSet[Int]()  //向HashSet中添加元素  set1 += 2  //add等价于+=  set1.add(4)  set1 ++= Set(1,3,5)  println(set1)  //删除一个元素  set1 -= 5  set1.remove(2)  println(set1)}

3. Map

import scala.collection.mutableobject MutMapTest extends App{  val map1 = new mutable.HashMap[String, Int]()  //向map中添加数据  map1("spark") = 1  map1 += (("hadoop", 2))  map1.put("storm", 3)  println(map1)  //从map中移除元素  map1 -= "spark"  map1.remove("hadoop")  println(map1)}