scala集合框架

一、集合简介#

Scala中拥有多种集合类型,主要分为可变的和不可变的集合两大类:

  • 可变集合: 可以被修改。即可以更改,添加,删除集合中的元素;
  • 不可变集合类:不能被修改。对集合执行更改,添加或删除操作都会返回一个新的集合,而不是修改原来的集合。

二、集合结构#

Scala中的大部分集合类都存在三类变体,分别位于scala.collectionscala.collection.immutablescala.collection.mutable包中。还有部分集合类位于scala.collection.generic包下。

  • scala.collection.immutable :包是中的集合是不可变的;
  • scala.collection.mutable :包中的集合是可变的;

三、Trait Traversable#

Scala中所有集合的顶层实现是Traversable 。它唯一的抽象方法是foreach

四、Trait Iterable#

Scala中所有的集合都直接或者间接实现了Iterable特质,Iterable拓展自Traversable,并额外定义了部分方法:

五、mutable 包下的集合图

 6、案例

mutable.Arraybuffer,mutable.Listbuffer,mutable.HashSet都是+=添加元素

数组
1、定义一个Array
	//定义长度不可变数组,内容可变
    var ccc= new Array[Int](10)
    ccc(0)=1
	ccc.toBuffer
2、定义一个ArrayBuffer
 	//定义长度可变数组,内容可变
    var bbb = new ArrayBuffer[Int]()
    bbb+=2
    bbb.toArray


List(可变和不可变的都是val修饰)
1、不可变的list,内容长度都不可变
	val list1 = List(1, 2, 3)
	val list3 = 0 +: list1 //list3是新的list。element+:list结果是  List(0, 1, 2, 3)
	val list4 = list1 :+ 0 //list4是新的list。list:+element结果是  List(1, 2, 3, 0)   +在:的哪边,就加到list的哪边
2、可变listBuffer,内容长度均可变
    val lbuffer=new ListBuffer[String]()
    lbuffer+="a"
    lbuffer+="b"
    for(i<-lbuffer){
      println("lbuffer      "+i)
    }
    println(listBuffer1 ++= listBuffer1) //listBuffer1是b,c,d
    结果:
    lbuffer      a
	lbuffer      b
	ListBuffer(b, c, d, b, c, d)


Set(可变和不可变的都是val修饰)
1、不可变的set,内容长度都不可变
	val set1 = Set(1)
	val set2 = set1 + 2
	结果:
	Set(1, 2)
2、可变的set
    val set_mutable = mutable.HashSet[String]()
    set_mutable+="1"
    println("mutable set      "+set_mutable)

    结果:
    mutable set      Set(1)


map
1、可变的map
	val map1 = new mutable.HashMap[String, Int]()
    map1.put("dd", 4)
    println(map1) //Map(bb -> 2, cc -> 3, dd -> 4, aa -> 1)
    map1.remove("dd")
    println(map1) //Map(bb -> 2, cc -> 3, aa -> 1)


//栈
    val stack=new mutable.Stack[Int]()
    stack.push(1)
    stack.push(2)
    stack.pop()
    for(i<-stack){
      println("stack         "+i)
    }



//队列
    val queue=new mutable.Queue[String]()
    queue.enqueue("a")
    queue.enqueue("b")
    queue.dequeue()
    for (i<-queue){
      println("queue     "+i)
    }
发布了159 篇原创文章 · 获赞 75 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/xuehuagongzi000/article/details/102819719
今日推荐