Scala 集合基本介绍 | 学习笔记

简介: 快速学习 Scala 集合基本介绍

开发者学堂课程【Scala核心编程 - 进阶Scala 集合基本介绍学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9022


Scala 集合基本介绍


内容介绍:

一、Scala集合的基本特点

二、可变集合和不可变集合

集合包含了数据结构,比如说队列以及集合本身都是一种数据结构,在本节课主要讲的是数据结构的应用。


一、Scala 集合的基本特点

1.Scala 同时支持不可变集合和可变集合,不可变集合可以安全地并发访问

为什么Scala的设计者要同时设计不可变集合和可变集合两大类呢?

因为不可变集合是并发安全的,它只有读的操作,这对于线程安全带底层操作而言就会相对简单一些,同时效率就会更高一些。换言之,我们需要要优先使用不可变集合。

而对于可变集合,有些数组就是需要变化,比如有十个位置,然后一个数组来了之后,我们需要减少一些位置,就需要变化。

两个主要的包:

不可变集合:scala.collection.immutable

可变集合:scala.collection.mutable

2.Scala 默认采用不可变集合,对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本。

3.Scala 的集合有三大类:

序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 特质。在 Scala 集合中有可变和不可变两种类型。

Iterable 特质

打开一个文档手册,找一个list相关的,看一下list的继承关系,发现有一个lterable。这个Iterable就是从上面继承出来的,找多个list都是如此。


二、可变集合和不可变集合

1.不可变集合

不可变集合:Scala 不可变集合,就是这个集合本身不能动态变化。(类似 Java 的数组,是不可以动态增长的。)

不可变集合类似 Java 的数组:

Int[]nums=new int[3];

Java 里引进一个数组之后,这个数组的大小是固定的。数组的大小只能是三个元素。因此,在这儿提到的不能动态变化,主要是指集合本身不能动态变化。内容可以变化但集合不可以变化。

Nums[2]=11;//?

//nums[3]=90;//?

String[] names={“bj”,”sh”};

System.out.printin(nums+””+names);

在这里,重点强调集合本身不会发生变化,因为到后边我们会发现不可变集合可以进行加减运算,但是它本身不能变化。

2.可变集合

可变集合:可变集合,就是这个集合本身可以动态变化的,(比如 ArrayList,是可以动态增长的)

可变集合举例:

ArrayList al=new ArrayList();

al add(“zs”);

al add(“zs2”);

System.out.printin(al+””+al.hashcode());//地址

3.以 Java 作为例子举例

新建一个章节,取名叫chapter10。

在chapter10下面新建一个小文件,我们现在所讲的是一个快速入门案例。

以下的代码是非常容易的,因此就不再赘述,直接复制粘贴整理即可。

Import java.util.ArrayList;

Public class Java collection(

Public static void main(string[] args){

//不可变集合类似 Java 的数据

Int[]nums=new int [3]

nums[2]=11;//?

//nums[3]=90;//?

String[] names={“bj”,”sh”};

System.out.printin(nums+””+names);

//可变集合举例

ArrayList al=new ArrayList();

al add(“zs”);

al add(“zs2”);

System.out.println(al+””+al.hashcode());//地址

al.add(“zs3”);

System.out.println(al+””+al.hashcode());//地址

首先我们来看不可变,数组一旦定下来过后,就不能像上图这样写。图中你的本意是给它的第四空间赋一个90,但此时就会报错,系统会告诉你数字越界。

但是并不是内容不能变,比如说不可变集合,内容本来是11,将它变成22。这个操作是可以的。

//不可变集合类似java的数组

Int[]nums=new int[3];

Nums[2]=11;//?

nums[2]=22;//?

我们再来看可变集合的概念,一个 list 的集合,里面放 string 内心。我们可以加任意个数据。而且一旦加了之后,Hash code 也会发生变化。

//可变集合举例

ArrayList al=new ArrayList();

al add(“zs”);

al add(“zs2”);

System.out.println(al+””+al.hashcode());//地址

al.add(“zs3”);

System.out.println(al+””+al.hashcode());//地址

比如,原先的 al 加了两个数据进去,再来看 hash code 的地址是,试运行一下。

ArrayList al=new ArrayList();

al add(“zs”);

al add(“zs2”);

System.out.println(al+”地址=”+al.hashcode());//地址

hash code 的值:[zs,zs2]地址=242625

重新加一个数据库。加了之后,我们再来看地址是否发生变化。

ArrayList al=new ArrayList();

al add(“zs”);

al add(“zs2”);

System.out.println(al+”地址=”+al.hashcode());//地址

al.add(“zs3”);

System.out.println(al+”地址=”+al.hashcode());//地址

此时它的例子发生了变化。这说明它的底层会开辟一个空间,把东西扔进去,因此本身就发生了变化。

[zs,zs2]地址=242625

[zs,zs2,zs3]地址2=7642233

相关文章
|
6月前
|
安全 Java Scala
Scala集合【上】
Scala集合【上】
|
Scala
162 Scala 集合
162 Scala 集合
43 0
|
6月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
6月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
5月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
27 0
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
107 2
|
6月前
|
Scala
Scala综合练习_基于以下List集合实现词频统计
Scala综合练习_基于以下List集合实现词频统计
48 0
|
Scala 容器
Scala集合和遍历 2
Scala集合和遍历
73 0
|
Scala 索引
Scala集合和遍历 1
Scala集合和遍历
68 0
|
分布式计算 Java 大数据