集合
可变集合,不可变集合
可变集合,可扩展、添加元素、删除、修改
不可变集合,可以模拟添加、删除
1.区别:
A (1,2,3) 不可变集合=> 模拟添加元素4,生成一个新的集合(1,2,3,4) 集合A不变
A (1,2,3) 可变集合=> 添加元素4,集合A变成(1,2,3,4)
2.使用时选择,使用可变集合还是使用不可变集合。
首选不可变集合。效率高,占用的存储空间更少
3.线程是否安全(Spark要做并行程序)
多线程如何选择集合?
如果选择非线程安全的集合:1.自己去加锁。2.把集合局部到一个线程里,不做共享数据。
数组
定长数组和变长数组
定长数组
object ArrayDemo {
// 数组可以随机存取 通过下标 顺序存储 读取查询的效率比较高 删除和添加修改效率低
// 经常修改使用链表
//
def main(args: Array[String]): Unit = {
// 定义数组
val arr = Array(10,20,30)
// 声明长度为10,初始值为0的一个数组
val arr2 = new Array[Int](10)
// 访问数组
println(arr(2))
// 输出整个数组
println(arr2.toBuffer)
// 遍历数组
for (i <- arr)
println(i)
// 修改数组元素
arr(0) = 100
println(arr(0))
// 定长数组可变集合的一种,但是长度不可变。。。
}
}
变长数组
import scala.collection.mutable.ArrayBuffer
/**
* 可变数组
*/
object ArrayBufferDemo {
def main(args: Array[String]): Unit = {
// 定义一个变长数组
val nums = ArrayBuffer[Int]()
// 在尾部添加元素
nums += 10
// 在尾部追加多个元素
nums += (20,30,40)
// 在尾部追加一个集合
nums ++= Array(50,60)
println(nums)
// +=对应-= ++= 对应 --= 效果相反 在尾部删除元素 后面一定跟集合
// 可以使用append追加
nums.append(100,200,3,1,2,3,5,6,72,4,234,234,132,123,25,536,2)
println(nums)
// 使用insert在某个位置插入元素
nums.insert(5,666)
println(nums)
// 删除元素 剪断
nums.trimEnd(10)
println(nums)
// 给insert对应的删除元素的方法remove
nums.remove(2,2)
println(nums)
// 数组的遍历
// Scala两种遍历方式
// todo
// 定长数组和变长数组的转换
val arr = Array(1,2,3)
// 变长转化为定长数组
nums.toArray
// 定长数组转化成变长数组
arr.toBuffer
// 求和的方法
val res1 = nums.sum
// 元素最大值
val res2 = nums.max
// 元素最小值
val res3 = nums.min
// 排序
val res4 = nums.sorted // 括号里可以写自定义的排序方式 默认升序
val res5 = nums.sorted.reverse // 逆序
println(res5)
}
}