Skip to content

Latest commit

 

History

History
289 lines (232 loc) · 11.8 KB

collections-overview.md

File metadata and controls

289 lines (232 loc) · 11.8 KB

Kotlin 标准库提供了一整套用于管理集合的工具,集合是可变数量 (可能为零)的一组条目,各种集合对于解决问题都具有重要意义,并且经常用到。

集合是大多数编程语言的常见概念,因此如果熟悉像 Java 或者 Python 语言的集合,那么可以跳过这一介绍转到详细部分。

集合通常包含相同类型的一些(数目也可以为零)对象。集合中的对象称为元素条目。例如,一个系的所有学生组成一个集合,可以用于计算他们的平均年龄。

以下是 Kotlin 相关的集合类型:

  • List 是一个有序集合,可通过索引(反映元素位置的整数)访问元素。 元素可以在 list 中出现多次。列表的一个示例是电话号码:有一组数字、这些数字的顺序很重要并且数字可以重复。
  • Set 是唯一元素的集合。它反映了集合(set)的数学抽象:一组无重复的对象。一般来说 set 中元素的顺序并不重要。例如,the numbers on lottery tickets form a set: they are unique, and their order is not important.
  • Map(或者字典)是一组键值对。键是唯一的,每个键都刚好映射到一个值。 值可以重复。map 对于存储对象之间的逻辑连接非常有用,例如,员工的 ID 与员工的位置。

Kotlin 让你可以独立于所存储对象的确切类型来操作集合。换句话说,将 String 添加到 String list 中的方式与添加 Int 或者用户自定义类的到相应 list 中的方式相同。 因此,Kotlin 标准库为创建、填充、管理任何类型的集合提供了泛型的(通用的,双关)接口、类与函数。

这些集合接口与相关函数位于 kotlin.collections 包中。我们来大致了解下其内容。

集合类型

Kotlin 标准库提供了基本集合类型的实现: set、list 以及 map。 一对接口代表每种集合类型:

  • 一个 只读 接口,提供访问集合元素的操作。
  • 一个 可变 接口,通过写操作扩展相应的只读接口:添加、删除及更新其元素。

请注意,更改可变集合不需要它是以 var 定义的变量:写操作修改同一个可变集合对象,因此引用不会改变。 但是,如果尝试对 val 集合重新赋值,你将收到编译错误。

fun main() {
//sampleStart
    val numbers = mutableListOf("one", "two", "three", "four")
    numbers.add("five")   // 这是可以的
    println(numbers)
    //numbers = mutableListOf("six", "seven")      // 编译错误
//sampleEnd

}

{kotlin-runnable="true" kotlin-min-compiler-version="1.3"}

只读集合类型是型变的。 这意味着,如果类 Rectangle 继承自 Shape,则可以在需要 List <Shape> 的任何地方使用 List <Rectangle>。 换句话说,集合类型与元素类型具有相同的子类型关系。 map 在值(value)类型上是型变的,但在键(key)类型上不是。

反之,可变集合不是型变的;否则将导致运行时故障。 如果 MutableList <Rectangle>MutableList <Shape> 的子类型,你可以在其中插入其他 Shape 的继承者(例如,Circle),从而违反了它的 Rectangle 类型参数。

下面是 Kotlin 集合接口的图表:

Collection interfaces hierarchy{width="500"}

让我们来看看接口及其实现。 To learn about Collection, read the section below. To learn about List, Set, and Map, you can either read the corresponding sections or watch a video by Sebastian Aigner, Kotlin Developer Advocate: