【问题标题】:How to create a Dictionary [closed]如何创建字典 [关闭]
【发布时间】:2013-05-12 18:11:58
【问题描述】:

我想制作某种结构,其中我可以有重复的键但值不同。 我使用 java,hashmap 很好,但不允许重复键,我为 multimaps 导入了 google guava 库,但似乎无法让它工作任何更好的想法或建议? 我想保存多个对象,然后使用键搜索它们,但有些对象将具有相同的键。

查找 java 字典

这是我要插入的示例

    NP|DET|NOM|
    NP|PROPERNOUN|
    NOM|NOUN|NOUN|
    S|NP|VP|
    VP|VERB|NP|
    VP|VERB|PP|

最左边的值是键,右边的终端是值

【问题讨论】:

标签: java dictionary shared-libraries


【解决方案1】:

如果您必须这样做,您将失去 O(1) 查找时间。你能做的最好的事情是,实现一个二叉树来拥有它,并且如果你的键将是重复的,那么它具有最佳的查找和插入时间。您还可以扩展 Hashmap 并覆盖 put 函数来处理冲突。

如果您可以使用 Apache Commons,请查看下面的 Multimap 和 MultiHashmap 示例。 org.apache.commons.collections.MultiHashMap

MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);

来源:Multimap & Multihashmap documentation of Apache Commons

注意:请在发布之前检查是否已经存在问题。

【讨论】:

【解决方案2】:

Java 没有用于存储重复键的集合或映射结构。

如果您想在一个键下存储多个值,则应将Collection 存储为值。

例如:

private Map<K, Collection<V>> map = new HashMap<K, Collection<V>> ();

public void multiPut(K k, V v) {
  Collection<V> c = map.get(k);
  if (c == null) {
    c = new ArrayList<V>();
    map.put(k, c);
   }
 c.add(v);
}

【讨论】:

    【解决方案3】:

    根据定义,Map 不能包含非唯一键。您需要将值存储为Collection(例如ArrayList)。

    private Map<String, Collection<String>> myDictionary = new HashMap<>();
    
    public void addWord(String word, String definition) {
        Collection definitions = myDictionary.get(word);
        if(definitions == null) {
             definitions = new ArrayList<String>();
             myDictionary.put(word, definitions);
        }
        definitions.add(definition);
    }
    

    【讨论】:

      【解决方案4】:

      我建议使用 HashMap 并在其中放入某种列表,例如 a

      HashMap<String, ArrayList<TheKindOfStuffYouWantToSave>>
      

      【讨论】:

        【解决方案5】:

        我可以想到如下所述的自定义逻辑

        创建一个 HashMap>。这里key是单词,value是含义的arraylist。

        编写一个在代码中添加字典条目的方法。方法应该检查一个键条目是否不存在,初始化一个arraylist,将值添加到这个列表中,最后将这个arraylist保存在hashmap中,以对抗新的键。如果 key 存在,则获取 arraylist 并向其中添加一个条目。

        【讨论】:

          猜你喜欢
          • 2015-01-23
          • 2012-11-12
          • 2021-02-27
          • 2021-09-28
          • 2015-03-07
          • 1970-01-01
          • 1970-01-01
          • 2013-09-04
          相关资源
          最近更新 更多