禅与计算机程序设计艺术Kotlin精讲-黑马程序员(原创)Kotlin

kotlin精讲-第5章(16)map集合-中

2017-12-06  本文已影响136人  739c8d412b4c

map集合常见方法和属性

集合可以理解为是一个容器,容器操作我们自然想到“增删改查”,但是需要注意可写集合才有“增删改查”,不可写集合只有“查”。

添加元素:put、putAll

添加元素,主要有如下几种方式:

使用put方法直接追加元素,方法签名如下:

public fun put(key: K, value: V): V?

使用putAll方法批量添加集合,无返回值,方法签名如下:

public fun putAll(from: Map<out K, V>): Unit

使用putAll方法批量添加数组,无返回值,方法签名如下:

public fun <K, V> MutableMap<in K, in V>.putAll(pairs: Iterable<Pair<K,V>>): Unit {
    for ((key, value) in pairs) {
        put(key, value)
    }
}

上面的方法,我们编写一个案例,验证下,参考代码:

删除元素:remove

删除元素,主要有如下几种方式:

使用remove方法按照key删除,成功返回key对应的value,否则返回null,方法签名如下:

public fun remove(key: K): V?

使用remove方法按照key-value,成功返回true,否则返回false,方法签名如下:

public fun remove(key: K, value: V): Boolean {
    // See default implementation in JDK sources
    return true
}

我们编写一个案例,验证下上面这些方法,参考代码:

修改元素:set、下标修改

集合的修改,可以通过set方法、下标操作,在Java里面是不可以通过下标操作的,Kotlin中支持下标修改集合。至于下标访问的原理,后面学了操作符重载之后就明白了,在这里,我们可以先把握使用。

当然,还可以通过put方法,去覆盖元素,之前正经经过put方法的使用,这里不再细说。

我们看看set方法的方法签名:

public inline operator fun <K, V> MutableMap<K, V>.set(key: K, value: V): Unit {
    put(key, value)
}

这里估计大家不懂的就是“operator”这个关键字是什么意思。这个到后期讲解操作符重载就知道了。

   我们通过一个案例,来看看集合的修改操作,参考代码:

查询元素:get、getOrDefault、getValue、下标

集合的查询,要通过get、getOrDefault 、getOrNull方法以及下标操作。在Java里面是不可以通过下标操作的,Kotlin中支持下标修改集合。至于下标访问的原理,后面学了操作符重载之后就明白了,在这里,我们可以先把握使用。

get方法,根据key返回value,方法签名如下:

public operator fun get(key: K): V?

同set方法,get方法的申明上也有一个“operator”。

getOrDefault方法,根据key返回value,没有对应的value,返回默认值。方法签名如下:

public fun getOrDefault(key: K, defaultValue: @UnsafeVariance V): V {
    // See default implementation in JDK sources
    return null as V
}

getValue方法,根据key返回value,没有对应的value,抛异常。方法签名如下:

public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)

我们通过一个案例,来看看集合的查询操作,参考代码:

是否包含元素:contains、containsKey、containsValue

判断元素是否包含,map集合提供了contains、containsKey、containsValue方法。

contains方法,是否包含key,接收元素key,返回Boolean类型,方法定义如下:

public inline operator fun <@kotlin.internal.OnlyInputTypes K, V> Map<out K, V>.contains(key: K) : Boolean = containsKey(key)

containsKey方法,,是否包含key,接收元素key,返回Boolean类型,方法定义如下:

public fun containsKey(key: K): Boolean

containsValue方法,是否包含key,接收元素value,返回Boolean类型,方法定义如下:

public fun containsValue(value: @UnsafeVariance V): Boolean

我们通过一个案例,来看看集合的原始是否包含操作,参考代码:

获取数组长度:size属性、count方法

同数组,获取长度可以通过size属性和count方法去获取,参考代码:

上一篇 下一篇

猜你喜欢

热点阅读