gpt4 book ai didi

Kotlin map : why is there no toHashMap()?

转载 作者:行者123 更新时间:2023-12-02 12:18:53 26 4
gpt4 key购买 nike

在 Kotlin 中,Map类(class)有toLinkedMap()toSortedMap()扩展方法。

但是为什么没有toHashMap()方法?事实上,由此产生的Map许多 stdlib 方法的实现是 LinkedHashMap ,但将其转换为 HashMap在我的代码中会让我依赖于不好的实现。

引入这样的方法可以使开发人员免于深入研究实现,并且使用当前的实现它只会执行强制转换。

我的用例是:

val matchesInClass: HashMap<MessageClass, HashMap<Int, Int>>

//...

for ((cl, matches) in matchesInClass) {
matchesInClass[cl] = matches.filterKeys { it !in banned } //error: not a HashMap
}

当我使用 HashMap(matches.filterKeys { it !in banned })它会导致创建新 map 的开销,我很乐意避免这种情况。

那么,这是设计吗?

最佳答案

为什么? 很难回答,但搜索或添加票到 Kotlin issue tracker将为您提供答案并在状态更改时更新您。似乎toHashMaptoHashSet 起失踪有吗(从 1.0 BETA 4 开始)。

注: LinkedHashMap 是默认值,因为 kotlin 想要在您从 List 开始时保持元素的顺序至 SetListMapList并确保事物仍处于相对顺序中。

无论如何,与此同时,这里有一个自定义 toHashMap为你:

public fun <K, V> Iterable<Pair<K, V>>.toHashMap(): Map<K, V>
= HashMap<K, V>(collectionSizeOrNull() ?: 16).apply { putAll(this@toHashMap) }

您可以使用类似于 toMap 的逻辑使其更好。选择最佳初始 map 大小的函数,或者不设置它并信任默认的增长实现。

Kotlin 旨在轻松扩展。如果所有东西都放入标准库中,那么在受限设备(如 Android)上的人们会提示它太大了,而且人们要求的大多数东西都是小奇怪的,只是将几行代码放入您自己的自定义库中。

关于 Kotlin map : why is there no toHashMap()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33532786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com