gpt4 book ai didi

java - 馆藏 map

转载 作者:搜寻专家 更新时间:2023-11-01 01:01:00 24 4
gpt4 key购买 nike

我想用 Java 制作集合 map ,所以我可以制作类似的东西

public void add(K key, V value) {  
if (containsKey(key)) {
get(key).add(value);
} else {
Collection c = new Collection();
c.add(value);
put(key, value);
}
}

我试过用类似的东西来制作它

public class CollectionMap<K, C extends Collection<V>> extends HashMap<K, C>

但是编译器提示 <V>部分,并且仍然存在制作适当的新系列的问题。

目前,我做了两个类:SetMap 看起来像这样

 1: public class SetMap<K, V> extends HashMap<K, Set<V>> {
2:
3: public void add(K key, V value) {
4: if (containsKey(key)) {
5: get(key).add(value);
6: } else {
7: Set<V> list = new HashSet<V>();
8: list.add(value);
9: put(key, list);
10: }
11: }
12:
13: }

和 ListMap 看起来几乎一样,除了第 7 行我创建了新的 ArrayList。这种重复小到可以容忍,但问题是这种“嵌套泛型”在 Java 中是否可能?

编辑:

作为erickson said , 解决方案在 <A, B extends Something<A>>而不仅仅是 <B extends Something<A>>

所以代码看起来像

public abstract class CollelctionMap<K, V, C extends Collection<V>> extends HashMap<K, C> {

protected abstract C newCollection();

public void add(K key, V value) {
if (containsKey(key)) {
get(key).add(value);
} else {
C c = newCollection();
c.add(value);
put(key, c);
}
}
}

而ListMap和SetMap只提供适当的集合

最佳答案

如果mapMap<K, Collection<V>> , 使用成语 computeIfAbsent(...).add(...) ,像这样:

map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);

或者,对于 Set :

map.computeIfAbsent(key, k -> new HashSet<>()).add(value);

关于java - 馆藏 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254351/

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