一、集合简介#
Scala中拥有多种集合类型,主要分为可变的和不可变的集合两大类:
- 可变集合: 可以被修改。即可以更改,添加,删除集合中的元素;
- 不可变集合类:不能被修改。对集合执行更改,添加或删除操作都会返回一个新的集合,而不是修改原来的集合。
二、集合结构#
Scala中的大部分集合类都存在三类变体,分别位于scala.collection
, scala.collection.immutable
, scala.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)
}