gpt4 book ai didi

java - 实现几个签名冲突的接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:11 24 4
gpt4 key购买 nike

最后,我尝试在 Java 中实现一个混合结构,看起来像这样:

public class MapOfSet<K, V extends HasKey<K>> implements Set<V>, Map<K, Set<V>>

其中HasKey是以下接口(interface):

public interface HasKey<K> {
public K getKey();
}

不幸的是,Java 中的Set 接口(interface)和Map 接口(interface)的methos 签名之间存在一些冲突。我最终选择只实现 Set 接口(interface),并在不实现该接口(interface)的情况下添加 Map 方法。

你看到更好的解决方案了吗?

针对第一条评论,我的目标是:

Have a set structure and be able to efficiently access to a subset of values of this set, corresponding to a given key value. At the beginning I instantiated a map and a set, but I tried to joined the two structures to optimize performances.

最佳答案

你想完成什么? Map 已经通过其 [keySet()]( http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html#keySet()) 方法将其键公开为 Set。如果您想要可靠的迭代顺序,则有 LinkedHashMapTreeMap

更新:如果你想确保一个值只被插入一次,你可以扩展我上面提到的类之一来创建类似 SingleEntryMap 的东西并覆盖 的实现put(K key, V value) 进行唯一性检查并在值已插入时抛出异常。

更新:这样的事情会奏效吗? (我没有打开我的编辑器,所以这可能无法编译)

public final class KeyedSets<K, V> implements Map<K,Set<V>> {
private final Map<K, Set<V>> internalMap = new TreeMap<K, Set<V>>;
// delegate methods go here
public Set<V> getSortedSuperset() {
final Set<V> superset = new TreeSet<V>();
for (final Map.Entry<K, V> entry : internalMap.entrySet()) {
superset.addAll(entry.getValue());
}
return superset;
}
}

关于java - 实现几个签名冲突的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70732/

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