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

 

posted @ 2020-03-05 23:04  无敌小阿没  阅读(116)  评论(0编辑  收藏  举报