gpt4 book ai didi

java - 为什么 Java 的 Map 接口(interface)有一个 containsValue(Object) 方法,但没有 value->keys 查找?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:04 25 4
gpt4 key购买 nike

这里有问题如何得到Map s 与给定值关联的键,答案指向谷歌集合(对于双向 map )或本质上说“循环遍历它”。

我最近才注意到 Map 界面有一个 boolean containsValue(Object value) “对于 Map 接口(interface)的大多数实现, map 大小可能需要线性时间”的方法和 AbstractMap 中的实现确实迭代了 entrySet() .

设计决定包含 containsValue 的原因可能是什么?在 Map , 但没有 Collection<V> getKeysForValue(Object) ?我明白为什么有人会省略两者或同时包括两者,但如果有一个,为什么不包括另一个?

我想到的一件事是,它需要任何 Map 实现来了解返回值的 Collection 实现,但这实际上不是一个很好的理由,因为 Collection<V> values()方法还返回一个集合(在 new AbstractCollection<V>() 的情况下为匿名 AbstractMap)。

最佳答案

有些集合支持这一点,但它们通常涉及主线一个反向查找映射,这比相对简单的一对一映射更昂贵。因此,支持这一点可能会使所有 map 的更新成本增加一倍以上。

另一个问题是泛化。键必须实现 hashCode 和 equals(对于 HashMap )或可比较的(对于排序映射)值不必实现任何使构造通用反向查找变得不可能的东西,或者它对不太可能需要的值提出额外要求.

关于java - 为什么 Java 的 Map 接口(interface)有一个 containsValue(Object) 方法,但没有 value->keys 查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223522/

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