2

在我的应用程序中,我们已经有了

Map<String, List<String>>

现在我们有了另一个用例,需要找到一个映射到列表中特定字符串的键。

我正在考虑写以下内容:

string getKey(Map<String, List<String>> m, String str) {
  for (Entry<String, List<String>> entry :m.entrySet()) {
    if(entry.getValue().contains(str)) {
      retrun entry.getKey();
    }
  }
  return null;
}

Map最多可以有 2000 个条目。每个List最多可以有 500String秒。

有什么更适合的建议吗?Map如果有更好的方法,我也可以更改初始数据结构( )。

4

2 回答 2

5

我建议您添加另一个提供反向映射的映射 - 从字符串到键列表。这将需要更多的工作来与第一张地图保持同步,但会为您的任务提供最佳性能。

尽管如此,如果您认为此类查询的频率相对较低,也许您的解决方案可能会更好(虽然速度较慢,但​​您为保持两个地图同步而节省的时间将弥补这一点)。

于 2013-01-14T12:08:36.123 回答
2

你熟悉 Guava API 吗?如果您可以自由添加/更改依赖项,那么绝对值得一试,尤其是Multimap接口的实现。它正是为同一个键可以映射到多个值的情况而构建的。

如果我误解了这个问题并且同一个键不会映射到多个值,那么您可能需要重新制定/重新考虑您的问题,因为您当前的想法Map<String, List<String>>基本上就是这样。

于 2013-01-14T12:14:16.623 回答