Java:优化检查ObjectList和Object2List的属性

时间:2016-09-24 14:58:47

标签: java optimization

嗨,我想问你们有没有办法优化这个:也许图书馆方法可以提供帮助?

for (int i = 0; i < ids.size(); i++){
    for (int j = 0; j < obj.size(); j++){
        if (ids.get(i).equals(obj.get(j).getChatId())){
            // ...
        }
    }
}

1 个答案:

答案 0 :(得分:1)

由于您的嵌套循环,您的代码在 O(n * m)时间内运行。

要改善这一点,请先将ids集合转换为Set

Set<IdType> idSet = new HashSet<>(ids);
for (ObjType o : obj) {
    if (idSet.contains(o.getChatId())) {
        // ...
    }
}

由于add() O(1),因此设置构造为 O(n),并且contains()也是 O(1),这意味着新代码的性能是 O(n + m)