在我的申请中,我们已经有了
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
)。
答案 0 :(得分:5)
我建议您添加另一个提供反向映射的映射 - 从字符串到键列表。这将需要更多的工作来与第一张地图保持同步,但会为您的任务提供最佳性能。
如果您认为此类查询的频率相对较低,可能您的解决方案可能会更好(尽管速度较慢,您为保持两张地图同步而节省的时间将会弥补这一点。)
答案 1 :(得分:2)
您熟悉Guava API吗?如果您可以自由添加/更改依赖项,那么绝对值得一试,特别是Multimap
接口的实现。它完全适用于可以将相同键映射到多个值的情况。
如果我误解了这个问题并且相同的密钥不会映射到多个值,那么您可能需要重新制定/重新考虑您的问题,因为您当前的想法Map<String, List<String>>
基本上就是这样。