4

密钥是一个文件和一个单词。该文件给出了文件内的所有单词。这个词给出了所有有这个词的文件。我不确定域和共同域部分。我希望 K 是 type <String>, V 是 type <HashSet<FileObject>>

    public HashBiMap<K<String>,V<HashSet<FileObject>>> wordToFiles 
            = new HashBiMap<K<String>,V<HashSet<FileObject>>>();

    public HashBiMap<K<String>,V<HashSet<FileObject>>> fileToWords 
            = new HashBiMap<K<String>,V<HashSet<FileObject>>>();

谷歌的 HashBiMap。

4

2 回答 2

16

将其更改为

public HashBiMap<String,HashSet<FileObject>> wordToFiles = HashBiMap.create ();

但它看起来仍然很奇怪。我认为你应该使用另一个集合。从BiMap文档(HashBiMapimpelements BiMap):

双映射(或“双向映射”)是一种映射,它保留其值的唯一性以及其键的唯一性。此约束使 bimap 能够支持“反向视图”,这是另一个 bimap,包含与此 bimap 相同的条目,但具有相反的键和值。

我不知道您要解决的问题,但在查看您的代码后,我可以建议考虑使用 Multimaps。从它的文档:

类似于 Map 的集合,但可以将多个值与单个键相关联。如果您使用相同的键但值不同的两次调用 put(K, V),则多重映射包含从键到两个值的映射。

例如,您可以执行以下操作:

Multimap<String, FileObject> wordToFiles = HashMultimap.create();
wordToFiles.put("first", somefile);
wordToFiles.put("first", anotherfile);
for (FileObject file : wordToFiles.get("first"){
   doSomethingWithFile (file);
}
于 2010-04-04T14:25:31.343 回答
13

将此依赖项添加到您的“build.gradle”

compile 'com.google.guava:guava:19.0'

导入 BiMap 和 HashBiMap

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

创建双图

BiMap<String, String> myBiMap = HashBiMap.create();

放一些值

myBiMap.put("key", "value");

按键获取映射值,

myBiMap.get("key");

按值获取映射,

myBiMap.inverse().get("value");
于 2016-09-05T11:21:54.867 回答