gpt4 book ai didi

Java Multimap get 方法是否创建临时列表的动态分配?

转载 作者:行者123 更新时间:2023-12-02 05:34:07 25 4
gpt4 key购买 nike

Java Multimap .get() 方法是否创建临时列表的动态分配?从源代码来看:

Collection<V> get(@Nullable K key);


Returns the set of all keys, each appearing once in the returned set.
Changes to the returned set will update the underlying multimap, and vice
versa.

@return the collection of distinct keys

最佳答案

Multimap 是一个接口(interface),因此最终答案将取决于实现。如果我们以ArrayListMultimap为例,我们可以在这里看到源代码:

https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/ArrayListMultimap.java

如果你追踪继承层次结构,你会发现get是在抽象基类AbstractMapBasedMultimap中定义的:

https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/AbstractMapBasedMultimap.java#303

我们可以看到,如果没有找到,则会为该键创建一个Collection:

@Override
public Collection<V> get(@Nullable K key) {
Collection<V> collection = map.get(key);
if (collection == null) {
collection = createCollection(key);
}
return wrapCollection(key, collection);
}

对于createCollection的实现,我们需要回到ArrayListMultimap:

https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/ArrayListMultimap.java#129

@Override List<V> createCollection() {
return new ArrayList<V>(expectedValuesPerKey);
}

在这里我们可以看到正在按需创建一个新列表。但是,如原始问题中所述将其称为“临时”是不正确的。这将是支持 map 中该条目的真实列表。

但是,请记住,此答案适用于 Multimap 的一种特定实现和代码库的一种特定版本。这演示了探索代码的过程,因此如果您对其他实现或其他版本有疑问,那么您可以浏览代码以查看行为。

关于Java Multimap get 方法是否创建临时列表的动态分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187449/

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