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)-------列表相关推荐

  1. Scala之集合Collection

    概述 Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable collections) 静态与延迟加载集合 (Eager and delayed ev ...

  2. Scala 可变集合体系、不可变集合体系 详解

    文章目录 Scala数据结构的特点 1. Scala的集合基本介绍 2. 可变集合和不可变集合举例 不可变集合继承层次--览图 可变集合继承层次--览图 数组-定长数组(声明泛型) 1. 第一种方式定 ...

  3. scala 数组集合(思维导图,初级必备)

    scala 系列 scala 入门基础 scala 数组集合 scala 143个数组函数大全 scala 函数 scala OOP scala 高级扩展 scala 数组集合 scala 系列 前言 ...

  4. scala 学习笔记一 列表List

    1.介绍 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是.. 列表的元素类型 ...

  5. 容器集合——Collection(单列)、Map(双列)

    集合体系结构 集合类的特点 提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 集合类的体系图 Collection(单列) 概述     - 是单例集合的顶层接口,它表示一组对象,这些对 ...

  6. Day15 --框架集合 Collection集合 和 List 集合

    a.     对象数组 --自定义对象类         概述             * 创建一个自定义类用于存储学生信息,并且获取到每个学生信息 .         使用              ...

  7. java集合——数组列表(ArrayList)+散列集(HashSet)

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java集合--数组列表(ArrayList)+散列集(HashSet) 的相关知识: 0.2 ...

  8. Java 集合Collection常见知识点汇总~

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  9. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  10. 如何在Java中将集合转换为列表

    Lists in Java are ordered collection of data, whereas sets are an unordered collection of data. A li ...

最新文章

  1. vc++基于颜色直方图的图像检索,含代码
  2. K8s 工程师必懂的 10 种 Ingress 控制器
  3. pandans导出Excel并将数据保存到不同的Sheet表中
  4. 6大设计模式(4):接口隔离原则
  5. 常用系统函数oracle
  6. 计算机图形学笔记(第二周)
  7. Android OkHttp经验小结
  8. JS删除数组里的某一个元素
  9. 堪比“震网”:罗克韦尔PLC严重漏洞可导致攻击者在系统中植入恶意代码
  10. 易宝典文章——玩转Office 365中的Exchange Online服务 之二十一 怎样通过中继收件人实现邮件审核...
  11. 异常Exception分类
  12. android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
  13. 可变序列和不可变序列——python小练
  14. mysql配置文件路径
  15. 奥迪A6(C5)停车加热(驻车暖风)01406故障
  16. 使用STM32F4定时器的ETR功能对外部脉冲进行计数
  17. A股-股票程序自动化交易接口
  18. 如何修改文件最后一次修改时间?
  19. 微信开发系列 — — 微信模板消息
  20. 袁萌:Linux机器人来我家

热门文章

  1. 第七十三节,css盒模型
  2. 100句自我激励的名言佳句
  3. 配置Spring.NET
  4. (转载)Android开发者必知的开发资源
  5. C#常量——const和readonly(2)
  6. 《ASP网络编程从入门到精通》
  7. 王者荣耀英雄铭文;出装
  8. 【汇总目录】嵌入式系统技术
  9. netty使用(5)client_server一发一回阐释ByteBuffer的使用
  10. Android 第3方控件一览表