集合
集合简介
1. Scala的集合有三大类:序列Seq、集set、映射Map,所有的集合都扩展自Iterable特质。
- 对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本,分别位于下面两个包{不可变集合:scala.collection.immutable
可变集合:scala.collection.mutable}。
- Scala不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于Java中的String对向。
- 可变集合,就是这个对象可以对原对向进行修改,而不会返回新的对象。类似于Java中的StringBuilder对象。
建议:在操作集合的时候,不可变用符号,可变用方法
不可变数组
第一种定义数组方式
val arr1=new Array[Int](10)
arr1是数组名称,new是关键字。[Int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定Any。(10),表示数组的大小,确定后不可变。
另一种创建方式
val arr2=Array(12,13,14,15,16)
创建数组的时候将所有的数据添加进去,这样会简便高效
给元素赋值
创建数组,但未给赋值时,Int类型默认为0
arr1(0) = 12
访问元素
println( arr1 (0) )
普通for循环
for (i<- 0 until arr2.length){
//to方法没办法遍历到length-1位
print(arr2(i)+",")
用Scala自带方法的for循环
for (i<- arr2.indices) {
print(arr2(i)+",")
增强for循环,直接遍历所有元素
for (i <- arr2) println(i)
迭代器
val iter = arr2.iterator
hile (iter.hasNext)
println(iter.next())
调用foreach()方法
arr2.foreach( (i:Int) => println(i) )
将数组中所有元素连接起来,变为字符串打印出来
println ( arr2.mkString ("") ) //元素之间用什么连接,就将中间的放在引号里面
添加元素
因为数组不可变,所以添加元素的是返回出来的新数组
val arr3 = arr2 . : + (75) //旧数组后加小数点,冒号和加号
(加号在冒号后面,表示添加元素在数组最后,加号在冒号前面,表示添加元素在数组前面)
val arr4 = arr2.+:(56)
Scala中另一种写法
val arr5 = arr2 :+ 78 //加数组后面
val arr5 = 19 +: 29 +: arr2 :+ 78 //前面加两个,后面加一个,冒号和加号记得换位
可变数组
创建可变数组,两种方法
val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]() //创建单一个数组
val arr2 = ArrayBuffer(23,57,93) //简便
访问元素
println(arr2(2)) //与不可变一样
遍历等操作与上述一样
添加元素
可变数组一般不用:+的操作,因为这个操作需要创建新的对象
arr2 += 12 //在集合后面加
77 +=:arr2 //在集合前面加
(一般不要用可变数组为基础创建一个新集合,这样创建出来的集合在一个地址,在新集合或者旧集合添加元素时,两个集合都会出现新元素)
用方法在集合加元素
arr2.append(36)
arr2.prepend(11,76)
删除元素
arr2.remove(3) //3是位置
arr2.remove(3,10) //是从3位置删到10位置
arr2 -= 13 //删除13这个数,有删,没有什么都不做
数组转换
可变数组转换为不可变数组
val arr:ArrayBuffer[Int] = ArrayBuffer(23,56,98)
val newArr: Array[int]= arr.toArray //调用toArrag方法
不可变数组转换为可变数组
val buffer:mutable.BUffer[Int] = newArr . toBuffer //调用toBuffer方法
创建二维数组
val array:Array[Array[Int]] = Array.