【问题标题】:Check if part of a String exists in HashMap检查 HashMap 中是否存在 String 的一部分
【发布时间】:2018-11-28 13:54:07
【问题描述】:

我有一个 HashMap 60k 键/值对。

我有 100 个字符串,在这 100 个字符串中,有一个子字符串存在于 HashMap 中。

我将不得不重复这个过程一千次。有没有有效的方法来做到这一点?

假设,哈希包含类似:

journal of America、rev su arabia、comutational journal等。

还有这样的字符串:

发表于 rev su arabia

发布事件发生在

计算期刊 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;
}

请提出建议。

【问题讨论】:

  • 那些在我看来不像哈希。您的意思是说您将这些值存储在HashMap 中?
  • 是的,它的哈希图,更正了问题
  • 不是解决方案,但对于journalName,至少LinkedHashMap 在我的经验中比普通的HashMap 更有效
  • 如何使用linkedhashmap有效地搜索子字符串?
  • 感谢您的接受!

标签: java loops optimization hashmap


【解决方案1】:

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

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

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

因此,我认真地建议明确要解决的确切问题,然后确定最能解决问题的现有产品。否则,您将永远处于艰苦的战斗中。

【讨论】:

  • 我必须在文本中找到期刊名称(100 行)。我已经为期刊编制了数千份清单。我只是不知道哪一行和哪一部分会包含期刊名称。 Lucene 可能是这里的解决方案。但我想知道你的意见在这里。
猜你喜欢
  • 2018-11-29
  • 2013-04-09
  • 1970-01-01
  • 2013-01-19
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多