题
Lasty,我试图实现一种混合结构中爪哇,东西看起来像:
public class MapOfSet<K, V extends HasKey<K>> implements Set<V>, Map<K, Set<V>>
在HasKey是以下界面:
public interface HasKey<K> {
public K getKey();
}
不幸的是,有一些冲突之间的methos签名的定界和地图接口。我最后选择只实现了设定的接口,并增加该地图方法,而无需实现这个接口。
你看到一个更好的解决方案吗?
在响应第一意见,在这里是我的目标:
有一套结构和能够有效地访问的部分价值观的这一套,对应于一定的关键的价值。在开始的时候,我实例的地图和设置,但是我试图加入这两个结构优化的演出。
解决方案
也许你可以添加更多信息,操作做你真正想要的。我猜你想要建立一个设置其自动组它们的元素通过一个关键,对吗?问题是哪些行动你想要能够有?如何元素添加到备好了吗?可以要素被删除,通过消除它们从一个分组来看?我的建议就是一个接口,这样的:
public interface GroupedSet<K, V extends HasKey<K>> extends Set<V>{
Set<V> havingKey(K k);
}
如果你想要能够使用设置的地图你可以添加的另一个方法
Map<K,Set<V>> asMap();
这避免了使用多个接口的继承和所得的问题。
其他提示
什么是你想要完成吗? Map
已经暴露了其键作 Set
通过其[集()](http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html#keySet()) 法。如果你想要一个可靠的iteratior了,还有 LinkedHashMap 和 树形图.
更新:如果你想确保一个值只有被插入一次,可以延长一类中,我提到的上创造的东西就像一个 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;
}
}
我会说什么就是意味着要有时用作地图和有时作为设定应该实施的地图,因为这可以被看作是一套钥匙或价值观以及之间的映射键的和价值观。这是什么地图。containsKey()以及地图。containsValue()方法。