map/set/list
==============================================集合==========================================
@可变集合可以在适当的地方被更新或扩展,意味着你可以修改、添加、移除一个集合的元素。
@而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。 但是这些操作都将返回一个新的集合,同时原来的集合不发生改变。
@不可变的都在immutable里,可变的都在mutable里
---------------------------List-------------------------------
//不可变
val l=List(1,2,3,4,5)
println(l.head) //第一个元素
println(l.tail) //除了第一个元素外的其他集合
val l2=2::Nil //Nil为空List集合对象
println(l2)
val l3=1::l2
//val l3=l2::1 //错误,List需要写在右边
println(l3)
val l4=1::2::3::Nil
println(l4)
val l5="aaa"::6.6::l //元素可以是任意类型
println(l5)
-------------------------------ListBuffer------------------
//可变
val l5=scala.collection.mutable.ListBuffer[Int]();
l5+=1;
l5+=(2,3)
l5++=List(4,5,6) //-=和--=类似
for(x<-l5)
print(x+" ")
println("\n"+l5)
println(l5.isEmpty)
println(l5.tail.head) //2
val l=l5.toList //转为不可变List[Int]
val a=l5.toArray //转为数组Array[Int]
-------------------------immutable.Set--------------------------
//不可变
val s=Set(1,2)
//s+=3 //错误,这是不可变的
s+3 //set本身并不发生变化
//val s1=3+s //错误,Set必需写在左边
println("不变:"+s)
println(s+3) //-和--类似
println(s+3+4+5)
println(s+(3,4,5))
println(s++List(3,4,5))
println(s++Set(3,4,5))
//有序Set
val s2=scala.collection.immutable.SortedSet(2,1,4,5,3)
println(s2)
-------------------------------------mutable.Set-----------------------
//可变
val s=scala.collection.mutable.Set(1,2)
s+=3 //注意,可变Set可以使用+=
s++=Set(3,4,5)
println(s)
var s2=scala.collection.mutable.SortedSet(9,1,8,5,6)
println(s2)
-----------------------------------immutable.Map---------------------------
//不可变
val m=Map("a"->100,"b"->200)
println(m)
println(m("a"))
//m("a")=111 //错误
//println(m("c")) //异常
println(m.getOrElse("c",300)) //当键不存在时,返回默认值
//有序Map,注意:没有mutable.SortedMap
val m1=scala.collection.immutable.SortedMap("b"->200,"c"->300,"a"->100)
println(m1)
---------------------------------------mutable.Map--------------------------------
//可变
val m=scala.collection.mutable.Map("a"->100,"b"->200)
m("a")=101
println(m("a"))
println(m.getOrElse("c",300))
m+=("x"->300,"y"->400)
m-="b"
println(m)
---------------------------------------遍历Map-----------------------------------
//可变、不可变都可以用
val m=scala.collection.mutable.Map("a"->100,"b"->200,"c"->300,"d"->400)
for((k,v)<-m)
println(k+" "+v)
for(k<-m.keySet)
println(k+": "+m(k))
for((k,_)<-m)
println(k+" "+m(k))
for(v<-m.values)
println("value: "+v)
for((_,v) <- m)
println(v)
-----------------------------------------元组Tuple----------------------------
//相当于Object[],元素的类型可以不一样
val a=(1,2,3,"aaa","bbb")//类型任意
println(a._1) //_1表示元组的第一个元素
println(a._4)
for(i <- 0 until a.productArity) //注意:元组下标的起点依然是0
println(a.productElement(i))