检查HashMap中是否存在字符串的一部分

时间:2018-06-19 14:41:48

标签: java loops optimization hashmap

我有HashMap的60k键/值对。

我有100个字符串,在这100个字符串中,有一个包含在HashMap中的子字符串。

我将不得不重复此过程数千次。是否有一种有效的方法来做到这一点?

比方说,散列包含以下内容:

  

美国期刊,阿拉伯文修订版,计算期刊等。

还有像这样的字符串:

  

发布于阿拉伯文版本

     

发布事件发生在

     

计算机日记230:34

第一个和第三个字符串在哈希中包含键/值,我需要找出它们。

代码(效率不高)

private String contains(String candidateLine)
{
    Iterator<String> it = journalName.iterator();
    while (it.hasNext())
    {
        String journalName = it.next();
        if (candidateLine.contains(journalName))
            return journalName;
    }
    return null;
}

请提出建议。

1 个答案:

答案 0 :(得分:3)

鉴于您的要求,唯一的答案是:错误的设计点。您基本上是在问如何有效地支持“全文”搜索功能。对于这个问题,答案是:不要自己做。

含义:忘记在这里重新发明轮子了。而是选择现有的解决方案,例如Lucene(库)或产品,例如Solr或ElasticSearch(有关更多信息,请参见here)。

您看到的,很可能是我们在这里讨论的是“现实世界”的生产问题。因此,即使您找到了一种巧妙的方式来构建自己的数据结构来支持当前的需求,也很可能迟早会出现“更多”的需求。

因此,我认真建议您明确要解决的问题,然后确定最能解决问题的现有产品。否则,您将像永远一样进行艰苦的战斗。