Java 使用番石榴是个坏主意吗;s映射#filterKeys()?
我有一个使用guava的Java 使用番石榴是个坏主意吗;s映射#filterKeys()?,java,guava,Java,Guava,我有一个使用guava的Maps#filterKeys()的直接用例,但我想知道从性能的角度看这是否是个坏主意?我需要迭代过滤后的映射 查看我特别关注的javadoc-当不需要实时视图时,复制过滤后的地图并使用副本可能会更快。这是否意味着在过滤后的视图上迭代会非常慢,最好将其复制到另一个地图并使用它,还是根本不使用番石榴更好 此外,什么时候需要实时视图?它不一定会“超慢”。在过滤视图上迭代的执行方式就像使用if条件在原始地图上迭代以检查过滤条件一样 如果您的过滤器消除了大部分元素,并且您需要在映
Maps#filterKeys()
的直接用例,但我想知道从性能的角度看这是否是个坏主意?我需要迭代过滤后的映射
查看我特别关注的javadoc-当不需要实时视图时,复制过滤后的地图并使用副本可能会更快。
这是否意味着在过滤后的视图上迭代会非常慢,最好将其复制到另一个地图并使用它,还是根本不使用番石榴更好
此外,什么时候需要实时视图?它不一定会“超慢”。在过滤视图上迭代的执行方式就像使用
if
条件在原始地图上迭代以检查过滤条件一样
如果您的过滤器消除了大部分元素,并且您需要在映射上迭代多次,那么是的,这将比生成一个过滤副本慢
如果备份映射正在更改,并且您希望筛选映射反映这些更改,则需要实时视图。在我的情况下,在获得筛选映射后,不要使用备份映射。这取决于您需要对filterKeys()使用什么条件。例如,当您有要迭代的密钥子集时,结果的复杂性要差得多。这个问题应该提供完整的例子。此外,如果原始地图在您仍在使用过滤视图时发生更改(这种情况很少),则需要实时视图,filterKeys主要有助于减少复制地图所导致的性能问题。