Java 我们有多重地图吗?

Java 我们有多重地图吗?,java,hashmap,multimap,bimap,Java,Hashmap,Multimap,Bimap,正如我们现在看到的,有BiMap和multiMap的概念,但是有multiBiMap吗?那么我这是什么意思呢。 在多重映射中,K和V之间存在一对多关系,单个键可以与多个值关联,因此得名。 在双向映射中有K,V对,这是双向的,意味着你也可以得到V,K关系。就像有两个规则的地图,但同步。我需要一个双向的多重地图,你可以把这两个概念结合起来 import java.util.Set; import java.util.Set; import com.google.common.collect.Has

正如我们现在看到的,有BiMap和multiMap的概念,但是有multiBiMap吗?那么我这是什么意思呢。 在多重映射中,K和V之间存在一对多关系,单个键可以与多个值关联,因此得名。 在双向映射中有K,V对,这是双向的,意味着你也可以得到V,K关系。就像有两个规则的地图,但同步。我需要一个双向的多重地图,你可以把这两个概念结合起来

import java.util.Set;
import java.util.Set;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;

public class ManyToMany<K, V> {
    private final SetMultimap<K, V> keysToValues = HashMultimap.create();

    private final SetMultimap<V, K> valuesToKeys = HashMultimap.create();

    public Set<V> getValues(K key) {
        return keysToValues.get(key);
    }

    public Set<K> getKeys(V value) {
        return valuesToKeys.get(value);
    }

    public boolean put(K key, V value) {
        return keysToValues.put(key, value) && valuesToKeys.put(value, key);
    }

    public boolean putAll(K key, Iterable<? extends V> values) {
        boolean changed = false;
        for (V value : values) {
            changed |= put(key, value);
        }
        return changed;
    }
}
导入com.google.common.collect.HashMultimap; 导入com.google.common.collect.SetMultimap; 公共类很多{ private final SetMultimap keystalues=HashMultimap.create(); private final SetMultimap valuesToKeys=HashMultimap.create(); 公共设置getValues(K键){ 返回keystalues.get(key); } 公共设置GetKey(V值){ 返回值stokeys.get(值); } 公共布尔put(K键,V值){ 返回keystalues.put(key,value)和&valuesToKeys.put(value,key); }
public boolean putAll(K key,iterablei)如果不需要保留实际对,可以使用两个多重映射(一个一个)获得相同的效果(或实现自己的效果)问题是我想要这样简单的东西:multiBiMap,如果你有一个键,你就可以得到与该键相关的所有值,如果你有这个值,你就可以得到该键。但是正如你所说的,它是可以实现的。我只是不想重新发明轮子,如果它已经存在的话。这些值保证是唯一的吗que?“如果您有一个键,您将获得与该键关联的所有值,如果您有该值,您可以获得该键。”通过值,您是指与特定键关联的一个值吗?问题是不明确的。如果值是唯一的,则总体关系为一对多。但是,如果一个值可以与多个键关联,则该关系应为多对多,他可能希望在一个方向上查看一个键对多个值,并且在另一个方向上查看ne值到多个键。如果是一对多,您可以同时使用
“a”->[1,2]
“b”->[2,3]
,那么什么键与值
2
关联?我写了一些类似的东西,但我不喜欢我有两个列表,但这应该也可以。我只是认为在概念上不需要维护两个多重映射就不可能得到你想要的双向查找。是的,我同意,但拥有它们会很好它是为您实现和抽象的。而不是自己编写一个it文档。:-)