哪种类型的数据结构最好?

时间:2013-01-14 12:04:36

标签: java data-structures collections

在我的申请中,我们已经有了

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最多可以有500 String秒。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您熟悉Guava API吗?如果您可以自由添加/更改依赖项,那么绝对值得一试,特别是Multimap接口的实现。它完全适用于可以将相同键映射到多个值的情况。

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