Scala学习笔记1
scala数据结构,可大致分为数组(Aarray)元组(Tuple)列表(List)映射(Map)集合(Set)
scala同时支持可变集合和不可变集合,不可变集合可以安全的并发访问
scala优先采用不可变集合,当你采用可变集合的时候,需要导入scala.collection.mutable
1.数组
定长数组,长度不可变,但是可以修改元组,获取元素的值用小括号(下标)
声明有两种方式
(1)val arr = new Array[Int](10)
(2) val arr= Array[Int](1,2,3,4,5,)
为什么没有new也能创建数组对象,原因是Array类内部有apply方法,scala会隐式调用。
设置带有初始值的定长数组不能用new,因为调用Array的静态对象,可以传递多个参数,但是new的是调用的类的构造方法只能接受一个
变长数组
val arr=ArrayBuffer[Int](1,2,3,4) arr+=2 arr++=Array[Int](3,4) +=添加一个元素 ++=添加多个元素或者是一个数组
arr.remove(下标值)
可变数组.toArray=>不可变数组 不可变数组.toBuffer=>可变数组
2.元组 是多个不同类型对象的一种简单的封装
val t = (1,2,3) 全部是Int类型 val t1=(1,2,"3") 有Int String
获取元组的方式 t._1的值是1 元组的下标从1开始 获取的方式是元组名称._下标
元组的元素不可变 长度也不可变
3.列表
列表的声明方式
val list=List(1,2,3,4) 获取元素值 list(0)=1
不可变list元素不可修改,长度也不可以修改
添加元素
提示:中缀的写法不加点,也不加括号
可变列表 元素可变 长度可变
val list = ListBuffer[Int](1,2,3)
添加的元素的方式 list.append(1) list+=4 list+=(6,7) list ++=Array(8,9) list ++=List(0,1)
删除元素的方式 list-=1 list --=List(1,2)
++=是生成了新list并赋值(原来的list发生改变) ++是生成了新list但没有赋值(原来的list不变)
空列表 Nil和元素组成得到新的列表 ListBuffer不能用::和:::
相互转换 toList和toListBuffer
集合
不可变的
val set = Set[Int](1,2,3)
set.head获取第一个元素 set.tail 获取剩下的元素 set.isEmpty判断是否为空
可变的 HashSet 增加删除元素和List一样的方法
映射
哈希表相当于java的map,定义的方式 val map=Map("a"->1,("b",3),"c"->Array[Int](4,5,6))
如果想获取a=1的值 map.get("a").get.asInstanceOf[Int] 过程Option[Any]=Some(1) Any=1 Int=1 获取值的时候不存在抛异常
不可变的map元素和长度都不可变
val map = new HashMap[String,Int]
增加元素的方式大致相同发
注意删除元素的方式:
map -=("k的值") map --=Set("c","d")------同时获取两个k 删除两个
同时引用不可变和可变的映射的时候,可以起别名的方式避免冲突
如何将 List(Array("a",1), Array("b",2)) 转化成 Map("a"->1, "b"-> 2) 三种方式
val list=List(Array("a",1), Array("b",2)) //val tuples: List[(String, Int)] = list.map(x=>{(x, x.length)}) val t = list.map{case Array(x,y)=>(x,y)} val m = t.toMap println(m)
foreach遍历list
val list = List(1,2,3,4) list.foreach[Unit]((f:Int)=>{println(f)}) list.foreach((f:Int)=>println(f)) list.foreach((f)=>println(f)) list.foreach(f=>println(f)) list.foreach(println(_)) list.foreach(println) list foreach println