首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin学习之Map常用工具函数

Kotlin学习之Map常用工具函数

kotlin.collections.Maps.kt文件中定义了许多针对Map接口的工具函数,其中大多数是涉及函数式编程的高阶函数。今天只是介绍几个简单的函数。

一、Pair类与to()函数

Map接口表示一种“键->值”的数据结构,一个键对应一个值。但是在实现时,Map并没有维护键和值两个结构,而是一个个Entry对象,每个Entry对象表示一个键与值的对应关系,有三个属性:key、value和hash,因为hash只与key有关,所以可以视为只有两个属性:key和value

Kotlin为了简化Map的创建,定义了一个新类:Pair,相当于简化版的Map.Entry类:

上面的first相当于key、second相当于value,hashCode()充当了hash属性。

Kotlin还定义了一个to函数来创建Pair对象:

这是一个infix修饰的中缀函数,也是A类对象的扩展函数,它接受一个B类的参数,使用被扩展的A类对象和作为参数的B类对象创建一个Pair对象。

二、mapOf()与mutableMapOf()函数

Kotlin的Map接口也提供了生成不可变Map的mapOf()函数和生成可变Map的mutableMapOf()函数。Map接口的两个函数只接受Pair对象作为参数:

注意:

mapOf()和mutableMapOf()在元素数大于1时,都采用LinkedHashMap的实现方式。

linkedMapOf(pairs)是什么写法?这展开操作符,一般来说,给vararg函数传参数时,只能一个一个地传,如果想把一个数组传给vararg参数,可以在数组前面加个,告诉编译器“我不是把数组对象作为参数,而是把数组里的每个元素作为参数”。例如:

三、hashMapOf()与linkedMapOf()函数

hashMapOf()和LinkedMapOf()函数创建的都是可变Map:

四、解构函数

解构函数就是用operator关键字修饰的componentN()函数,这里的N是从1到5的整数。

Maps.kt中定义了两个解构函数:

都是Map.Entry的扩展函数,分别返回这个Entry的键和值,常用来遍历Map的键和值:

五、plus()与minus()函数

Map.kt重载了操作符+和-,方便进行增删元素。

所有plus()和minus()函数都是不可变的Map的扩展函数,所以每次调用plus()或minus()函数都会产生一个新的Map,这在Map内元素很多时可能会产生性能问题。

plus()和minus()函数有以下几种参数不同的重载形式:

Array

Iterable

:Pair集合

Pair:单个Pair对象

Sequence

:Pair序列

Map:另一个Map

对于MutableMap,Maps.kt重载了+=(plusAgain()函数)和-=(minusAssign()函数)操作符,分别相当于调用put()/putAll()函数和remove()/removeAll()函数:

六、toMap()函数

Map.kt还提供了一系列toMap()函数,用来将其它数据形式的Pair对象转换为可变的Map,包括如下两种重载形式:

支持Array

、Sequence

和Map四种数据结构转换为Map。

支持无参和一个destination参数两种形式,前者直接将转换得到Map赋给自身,后者则会把转换成Map赋给destination。

七、改进的putAll()函数

Maps.kt 给 MutableMap 重载了三个新的 putAll() 函数,它们分别接受 Array

和 Sequence

对象。

学海无涯苦作舟

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171220G0G3HC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券