【问题标题】:Java: how to use Google's HashBiMap?Java:如何使用 Google 的 HashBiMap?
【发布时间】:2010-04-04 14:21:21
【问题描述】:

键是一个文件和一个单词。该文件给出了文件内的所有单词。这个词给出了所有有这个词的文件。我不确定域和共同域部分。我希望 K 属于 <String> 类型,而 V 属于 <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>>>();

Google's HashBiMap.

【问题讨论】:

  • 那么到底是什么问题?
  • @Thomas:问题是没有公共构造函数

标签: java guava


【解决方案1】:

改成

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

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

双映射(或“双向映射”)是 保留唯一性的地图 它的价值以及它的 键。此约束启用 bimap 支持“逆视图”,即 另一个包含相同的bimap 条目作为此 bimap,但带有 反转键和值。

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

类似于地图的集合,但 可能关联多个值 用一把钥匙。如果你调用 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);
}

【讨论】:

    【解决方案2】:

    将此依赖项添加到您的“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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2014-05-28
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多