【发布时间】:2017-03-21 17:43:19
【问题描述】:
我想遍历Map<Object,List<Object>> 并提取Map.Entry 中的任何对象List<Object>(值)满足特定条件。
我可以看到两种方法:
1) 显而易见的方法是提取条目集并遍历列表(值)。
2) 将此 Map 转换为 Guava 的 MultiMap,循环遍历值,如果满足条件,标记键并从映射中提取实际 List。
我想避免第一种方法,因为它是一种非线性解决方案。还有其他更有效的方法吗?
【问题讨论】:
-
第一种方法不是线性时间呢?它与对象的总数成线性关系。这两种解决方案是等价的。
-
我真的不明白为什么 1) 不应该是线性时间。另外,您是否有通过分析发现的性能问题,还是只是猜测?
-
我认为操作希望避免在循环内循环。鉴于数据的布局,即使不是不可能,也很难
-
>> 这不是非线性的吗? - 不,不会。它将是 O(值的数量)。与 Guava MultiMap 相同。
-
您绝对必须迭代所有映射条目的所有值。没有办法解决它。任何解决方案都可以做到这一点。接受它并继续前进。