Java ...嵌套优化循环

凯尔

我在下面的代码中尝试优化一个嵌套循环,因为我知道嵌套for循环非常昂贵,有人有其他方法可以实现此目的吗?

提前致谢!

private List<Map<String, Object>> updateSomething(List<Map<String, Object>> list)
        throws MetadataException {
    for (Map<String, Object> map : list) {
        setFilePathAndOffsetParams(map);
        for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
            updateKeyOnMap(map, entry.getKey(), entry.getValue());
        }
    }
    return list;
}

private void updateKeyOnMap(Map<String, Object> map, String newKey, String oldKey) {
    if (!newKey.equals(oldKey)) {
        map.put(newKey, map.get(oldKey));
        map.remove(oldKey);
    }
约翰·布林格

我在下面的代码中尝试优化一个嵌套循环,因为我知道嵌套for循环非常昂贵,有人有其他方法可以实现此目的吗?

循环嵌套是否昂贵取决于每个循环执行了多少次迭代,以及每次迭代要完成什么工作-尤其是对于最内部的循环。通常,专注于消除嵌套循环作为提高性能的机制是没有用的,因为简单地以不同方式分配工作的重组通常不会产生重大影响。只有通过重组,您可以安排消除不必要的工作或增加并发性,这样的重组才有意义。

目前尚不清楚这两种选择是否适用于您的情况,但是提高并发性的最佳选择是并行处理列表元素。如果列表中可能包含重复的元素以及其他可能性,那么这是不安全的,但是如果合理,则可以这样编写:

list.parallelStream()
    .forEach(map -> {
        setFilePathAndOffsetParams(map);
        for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
            updateKeyOnMap(map, entry.getKey(), entry.getValue());
        }
    });

请注意,尽管并行化可以改善经过的时间,但它却增加了一些开销,却没有减少总的工作量。因此,它不会缩短总的CPU时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章