scala(13)-----集合(Collection)-------列表
Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。
Scala 集合分为可变的和不可变的集合。
可变集合可以在适当的地方被更新或扩展。这意味着你可以修改,添加,移除一个集合的元素。
而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。
接下来我们将为大家介绍几种常用集合类型的应用:
1.List(列表)
List的特征是其元素以线性方式存储,集合中可以存放重复对象。
Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。
列表的元素类型 T 可以写成 List[T]。例如,以下列出了多种类型的列表:
// 字符串列表
val site: List[String] = List("Runoob", "Google", "Baidu")// 整型列表
val nums: List[Int] = List(1, 2, 3, 4)// 空列表
val empty: List[Nothing] = List()// 二维列表
val dim: List[List[Int]] =List(List(1, 0, 0),List(0, 1, 0),List(0, 0, 1))
构造列表的两个基本单位是 Nil 和 ::
Nil 也可以表示为一个空列表。
以上实例我们可以写成如下所示:
// 字符串列表
val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))// 整型列表
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))// 空列表
val empty = Nil// 二维列表
val dim = (1 :: (0 :: (0 :: Nil))) ::(0 :: (1 :: (0 :: Nil))) ::(0 :: (0 :: (1 :: Nil))) :: Nil
列表基本操作
head
返回列表第一个元素tail
返回一个列表,包含除了第一元素之外的其他元素isEmpty
在列表为空时返回true
对于Scala列表的任何操作都可以使用这三个基本操作来表达。实例如下:
object Test {def main(args: Array[String]) {val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))val nums = Nilprintln( "第一网站是 : " + site.head )println( "最后一个网站是 : " + site.tail )println( "查看列表 site 是否为空 : " + site.isEmpty )println( "查看 nums 是否为空 : " + nums.isEmpty )}
}
执行以上代码,输出结果为:
第一网站是 : Runoob
最后一个网站是 : List(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true
连接列表
你可以使用 ::: 运算符或 List.:::() 方法或 List.concat() 方法来连接两个或多个列表。实例如下:
object Test {def main(args: Array[String]) {val site1 = "Runoob" :: ("Google" :: ("Baidu" :: Nil))val site2 = "Facebook" :: ("Taobao" :: Nil)// 使用 ::: 运算符var fruit = site1 ::: site2println( "site1 ::: site2 : " + fruit ) // 使用 Set.:::() 方法 注意,此方法,貌似,列表顺序会颠倒。fruit = site1.:::(site2)println( "site1.:::(site2) : " + fruit )// 使用 concat 方法fruit = List.concat(site1, site2)println( "List.concat(site1, site2) : " + fruit )}
}
执行以上代码,输出结果为:
site1 ::: site2 : List(Runoob, Google, Baidu, Facebook, Taobao)
site1.:::(site2) : List(Facebook, Taobao, Runoob, Google, Baidu)
List.concat(site1, site2) : List(Runoob, Google, Baidu, Facebook, Taobao)
List.fill()
我们可以使用 List.fill() 方法来创建一个指定重复数量的元素列表:
object Test {def main(args: Array[String]) {val site = List.fill(3)("Runoob") // 重复 Runoob 3次println( "site : " + site )val num = List.fill(10)(2) // 重复元素 2, 10 次println( "num : " + num )}
}
执行以上代码,输出结果为:
site : List(Runoob, Runoob, Runoob)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
List.tabulate( x,y)
List.tabulate() 方法是通过给定的函数来创建列表。
方法的第一个参数为元素的数量,可以是二维的,第二个参数为指定的函数,我们通过指定的函数计算结果并返回值插入到列表中,起始值为 0,实例如下:
object Test {def main(args: Array[String]) {// 通过给定的函数创建 5 个元素val squares = List.tabulate(6)(n => n * n)println( "一维 : " + squares )// 创建二维列表val mul = List.tabulate( 4,5 )( _ * _ ) println( "多维 : " + mul )}
}
执行以上代码,输出结果为:
一维 : List(0, 1, 4, 9, 16, 25)
多维 : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))
List.reverse
List.reverse 用于将列表的顺序反转,实例如下:
object Test {def main(args: Array[String]) {val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))println( "site 反转前 : " + site )println( "site 反转前 : " + site.reverse )}
}
执行以上代码,输出结果为
site 反转前 : List(Runoob, Google, Baidu)
site 反转前 : List(Baidu, Google, Runoob)
Scala List 常用方法
下表列出了 Scala List 常用的方法:
本文参考:http://www.runoob.com/scala
转载于:https://www.cnblogs.com/DeepRunning/p/9205960.html
scala(13)-----集合(Collection)-------列表相关推荐
- Scala之集合Collection
概述 Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable collections) 静态与延迟加载集合 (Eager and delayed ev ...
- Scala 可变集合体系、不可变集合体系 详解
文章目录 Scala数据结构的特点 1. Scala的集合基本介绍 2. 可变集合和不可变集合举例 不可变集合继承层次--览图 可变集合继承层次--览图 数组-定长数组(声明泛型) 1. 第一种方式定 ...
- scala 数组集合(思维导图,初级必备)
scala 系列 scala 入门基础 scala 数组集合 scala 143个数组函数大全 scala 函数 scala OOP scala 高级扩展 scala 数组集合 scala 系列 前言 ...
- scala 学习笔记一 列表List
1.介绍 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是.. 列表的元素类型 ...
- 容器集合——Collection(单列)、Map(双列)
集合体系结构 集合类的特点 提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 集合类的体系图 Collection(单列) 概述 - 是单例集合的顶层接口,它表示一组对象,这些对 ...
- Day15 --框架集合 Collection集合 和 List 集合
a. 对象数组 --自定义对象类 概述 * 创建一个自定义类用于存储学生信息,并且获取到每个学生信息 . 使用 ...
- java集合——数组列表(ArrayList)+散列集(HashSet)
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java集合--数组列表(ArrayList)+散列集(HashSet) 的相关知识: 0.2 ...
- Java 集合Collection常见知识点汇总~
看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...
- 【再探backbone 02】集合-Collection
前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...
- 如何在Java中将集合转换为列表
Lists in Java are ordered collection of data, whereas sets are an unordered collection of data. A li ...
最新文章
- vc++基于颜色直方图的图像检索,含代码
- K8s 工程师必懂的 10 种 Ingress 控制器
- pandans导出Excel并将数据保存到不同的Sheet表中
- 6大设计模式(4):接口隔离原则
- 常用系统函数oracle
- 计算机图形学笔记(第二周)
- Android OkHttp经验小结
- JS删除数组里的某一个元素
- 堪比“震网”:罗克韦尔PLC严重漏洞可导致攻击者在系统中植入恶意代码
- 易宝典文章——玩转Office 365中的Exchange Online服务 之二十一 怎样通过中继收件人实现邮件审核...
- 异常Exception分类
- android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
- 可变序列和不可变序列——python小练
- mysql配置文件路径
- 奥迪A6(C5)停车加热(驻车暖风)01406故障
- 使用STM32F4定时器的ETR功能对外部脉冲进行计数
- A股-股票程序自动化交易接口
- 如何修改文件最后一次修改时间?
- 微信开发系列 — — 微信模板消息
- 袁萌:Linux机器人来我家