Java中不可变集合
不可变集合概念(java为例)
public class ImmutableDemo01ForJava { public static void main(String[] args) { // 1.不可变集合,内容可变,旦数组本身不能动态增长 int []nums = new int[3]; nums[2] = 2; // nums[3] = 1 错误 // 2.可变集合,集合本省能够动态增长ArrayList arrayList = new ArrayList<String>(); arrayList.add("t1"); System.out.println(arrayList.hashCode()); arrayList.add("t2"); System.out.println(arrayList.hashCode()); } }
Scala中的集合
特点
Scala同时支持
不可变集合和可变集合,不可变集合可以安全的并发访问
两个主要的包:
不可变集合:scala.collection.immutable
可变集合: scala.collection.mutable
Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本
Scala的集合有三大类:
序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型.
举个例子
不可变集合: scala不可变集合,就是这个集合本身不能动态变化.(类似java的数组,是不可以动态增长的)
可变集合:可变集合,就是这个集合本身可以动态变化的.(比如:ArrayList,是可以动态增长的)
不可变集合继承层次一栏图
image.png
可变集合继承层次一栏图
image.png
细节
Seq是Java中没有的,List归属于Seq.所以这里的List和Java不一样.
for循环里的
1 to 3,就是基于IndexSeq下的VectorString也是属于indexSeqQueue和Stack归属于LinearSeq.即是线性的,有头有尾IndexSeq和LinearSeq.IndexSeq是基于索引的序列,LinearSeq是线性序列
① 数组
Why
Scala同时支持不可变集合和可变集合.不可变集合是线程安全的.
队列的应用场景
推荐系统要用户最近浏览的10个商品.
How
学习集合的创建、修改、删除、增加
定长数组-Array
创-方式一-new Array
/**
* @author sweetcs
*/object ArrayDemo01 { def main(args: Array[String]): Unit = { // 默认为零
var arr = new Array[Int](4)
println("数组长度=" + arr.length)
println("循环遍历数组:") for (item <- arr) {
println(item)
}
arr(3)=1
println("循环遍历数组:") for (item <- arr) {
println(item)
}
}
}创-方式二-Array
/**
* @author sweetcs
*/object ArrayDemo02ForApply { def main(args: Array[String]): Unit = { // 数组元素的类型时Any.一旦定义就不可在更改
var array = Array(1, 2, "beijing") // 数组元素的类型时Int.一旦定义就不可在更改
var arrayOfInts = Array(1,2) for (item <- array) {
println(item)
} // 传统for循环基于索引遍历
var len = array.length for (i <- 0 until len) {
printf("%s\t", array(i))
}
}
}
作者:sixleaves
链接:https://www.jianshu.com/p/bdf90fc486ed